awk

awk(上)

awk兼具sed的全部功能,并且还支持分段html

截取文档中某个段

打印文档中的某段,-F做用是指定分隔符正则表达式

打印全部的段awk -F ':' '{print $0}' test.txtbash

打印文件的所有内容awk  '{print $0}' test.txt,不须要加F,相似于cat查看文件spa

awk若是不指定分隔符,则默认空格或空白为分隔符htm

打印多段内容awk -F ':' '{print $1,$2,$4}' test.txt排序

打印内容能够指定#来分割,须要用到双引号文档

awk匹配功能

awk '/oo/' test.txt ,匹配包含oo的行字符串

awk -F ':' '$1 ~ /oo/' test.txt ,打印第一段中包含oo的行,~表示匹配get

awk -F ':' '$1 ~ /o+/' test.txt ,匹配第一段中包含o的行,支持正则表达式;这里须要知道,出现特殊符号时,awk不用加脱义字符,grep和sed则必需要加脱义字符数学

awk支持多个表达式一块儿写

针对数学表达式的用法

awk -F ':' '$3==0' test.txt ,匹配第3段等于0的;awk -F ':' '$3==0 {print $1}' test.txt //匹配第3段等于0的,并打印第1段;awk -F ':' '$3>=1000' test.txt //匹配第3段大于等于1000的,并打印全部段

awk -F ':' '$3>="1000"' test.txt,“1000”是以ASC码值进行排序的,被认为是字符串

awk -F ':' '$7!="/sbin/nologin" {print $0}' test.txt ,匹配出第7段不是/sbin/nologin的全部段,!=表示不匹配

awk(下)

条件操做符

awk -F ':' '$3<$4' test.txt ,匹配比较第3段小于第4段的行;awk -F ':' '$3==$4' test.txt,匹配出第3段和第4段相等的行,==就是等于,精确匹配

awk -F ':' '$3>"5" && $3<"7"' test.txt ,匹配第3段大于5的,和小于7的行,&&表示而且的意思

awk -F ':' '$3>1000 || $7=="/sbin/nologin"' test.txt ,匹配第3段大于1000的,或者第7段等于/sbin/nologin的所在的行,|| 表示 或者 的意思

awk -F ':' '$3>1000 || $7 ~ /bash/' test.txt,匹配第3段大于1000的,或者第7段包含/bash/的

awk的内置变量

经常使用的变量有OFS、NF和NR,OFS与-F选项有相似的功能,用来定义分隔符,可是在输出时定义

awk -F ':' '{OFS="#"} {if ($3>1000) {print $1,$3,$7}}' test.txt //匹配第3段大于1000,第7段匹配/bash/的,而后打印第1,第3,第7段内容, 并用#分割

NF表示用分隔符分割后一共有多少行;NR表示行号

awk -F ':' 'NR<=10' test.txt ,打印前10行;awk -F ':' 'NR<=10 && $1 ~ /root|sync' test.txt,匹配前10行中,第1段包含root或者sync的

awk -F ':' 'NF==6 && $1 ~ /root|sync/' test.txt,匹配文件中是6段的,并在第1段包含root或者sync的

awk -F ':' '{print $NR":"$NF}' test.txt

head -n3 test.txt |awk -F ':' '$1="root"' ,在前3行中,给第1段赋值为root

awk -F ':' '{(tot=tot+$3)}; END {print tot}' test.txt,tot值求和,tot默认0开始,每次和新的第三段值相加,最终第三段值加完,输出tot值

扩展

练习题

相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息