一个awk由三个部分组成:BEGIN语句块、END语句块和能够使用模式匹配的通用语句块。
这三个部分是可选的,任何一个部分都可以不出现在脚本中。
awk 'BEGIN {statements} {statements} END {end statements}'
例如打印文件行数
awk 'BEGIN {i = 0} {i++} END {print i}' filename #三个部分
awk 'END{print NR}' filename #可只用第三个部分
wc -l filename | awk '{print $1}' #先计算 只显示行数
awk常用参数
NR:整个脚本当前已经读取过的记录数,就是行号,从1开始。随着所读文件的数目,一直累加。
FNR:同NR,不过是针对当前在读的文件记录数。每开始读一个新文件时,从1开始累加,相当于行号。读完一个文件后就会清0,新的文件又会从1开始。
FILENAME:当前文件名
$0:读取文件的当前行
$n(n>0):第n列数据
NR:一行记录的字段的数目,也就是列数。
TCL_P728M TCL 74eda717a4aef660f362f1806eb85d9d
TCL_S720_JB2 TCL ecb6724875f6361466f4e91df603f06c
TCL_P728M TCL f654f6d4f2157a658c0d7f688bb074b8
TCL_P728M TCL d8ed297d1a0a405434e49f66d00d92ae
TCL_P728M TCL 5afcdd7b3eec3e15e636e3c7f249938a
d8ed297d1a0a405434e49f66d00d92ae 5
f654f6d4f2157a658c0d7f688bb074b8 2
74eda717a4aef660f362f1806eb85d9d 15
TCL_P728M TCL f654f6d4f2157a658c0d7f688bb074b8|2
TCL_S720_JB2 TCL ecb6724875f6361466f4e91df603f06c
TCL_P728M TCL 74eda717a4aef660f362f1806eb85d9d|15
TCL_P728M TCL 5afcdd7b3eec3e15e636e3c7f249938a
TCL_P728M TCL d8ed297d1a0a405434e49f66d00d92ae|5
awk '{if(NR==FNR){a[$3]=$0} else{a[$1]=a[$1]"|"$2}} END{for(i in a) {print a[i]}}' push cru
awk 'NR==FNR{a[$3]=$0;next}{print a[$1]}' push cru #只显示匹配上的文件
awk 'NR=FNR{a[$3]=$0;next}{print a[$1]"|"$2}' push cru#前后两个文件都显示
网友评论