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 '/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 -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/的
经常使用的变量有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值