awk

awk

awk兼具sed的所有功能,而且还支持分段


截取文档中某个段

打印文档中的某段,-F作用是指定分隔符

awk

打印所有的段awk -F ':' '{print $0}' 1.txt

awk

打印文件的全部内容awk  '{print $0}' 1.txt,不需要加F,类似于cat查看文件

awk

awk如果不指定分隔符,则默认空格或空白为分隔符

awk

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

awk

打印内容可以指定#来分割,需要用到双引号

awk

awk匹配功能

awk '/oo/' 1.txt ,匹配包含oo的行

awk

awk

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

awk

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

awk

awk支持多个表达式一起写

awk

awk


针对数学表达式的用法

awk -F ':' '$3==0' 1.txt ,匹配第3段等于0的;

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

awk -F ':' '$3>=1000' 1.txt //匹配第3段大于等于1000的,并打印所有段

awk

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

awk

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

awk


条件操作符

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

awk

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

awk

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

awk

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

awk


awk的内置变量

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

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

awk

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

awk

awk

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

awk

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

awk

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

awk

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

awk

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

awk

扩展

练习题