格式:
awk 'BEGIN{actions} \
pattern1 {actions} \
......
patternN {actions} \
END{actions} ' inputfile
awk以文件的一行为处理单位,提出了字段的概念,方便对行的字段进行更有效率的处理。行匹配语句 awk ‘’ 只能用单引号。
注意:
分隔符默认为空格(不是制表符),$0代表当前整条记录。
模式匹配时模式需用"//"包裹。
#以一个或者:或空格为分隔符,对文件/etc/test01按行处理,对于文件中包含有apple子串的行,输出这些行的第一个字段
#这里的文件也可通过管道传送过来
awk -F"[ :]+" '/apple/{print $0}' /etc/test01
#以:作为分隔符,以#作为输出分隔符,对第二行的数据的第一和第三个字段进行输出
awk 'BEGIN{FS=":";OFS="#"} NR==2{print $1,$3}'
#将begin体中的字符传入并切割后打印
awk 'BEGIN{info="this is a test";split(info,tA," ");
print length(tA);
for(k=1;k<=4;k++){print k,tA[k];}}'
经典实例:
1.统计每一行出现的次数
#假设test03为每一行都为一个单词的文件,新建一个数组a,以每一行单词作为key进行个数统计
awk '{a[$1]++}END{for(i in a){print a[i],i}}' test03
2.统计tcp连接状态信息(与上一个例子类似)
netstat -tna | awk '/^tcp/{arr[$6]++}END{for(state in arr){print arr[state] ": " state}}'