- 论坛徽章:
- 0
|
本帖最后由 justlucifer 于 2013-08-01 16:51 编辑
谢谢楼上大神推荐的书,我看明白这个命令的意思了。
假设,b.txt内容如下
a
b
c
a.txt内容如下
2 a
3 b
4 c
5 d
FNR是file number of record,就是文件的行记录数,NR是number of record,是AWK的行记录数,FNR==NR的意思是awk在处理第一个文件的时候,a[$0];next 的意思是以一行做为a[]数组的一个下标,next就是跳出这个行,执行下一行。
FNR==NR{a[$0];next}命令的执行结果就是
a[a]=0,a=0,a[c]=0.
FNR==NR不成立后,{a[$0];next}不再执行,执行!($2 in a),FNR==NR不成立就是说处理到a.txt这个文件了,$2是第二列的值,$2 in a的意思,第二列的值知否在a数组的下标中,如果在,$2 in a为真,!($2 in a)就为假。当!($2 in a)为真,就执行默认的print $0,打印出a.txt的这一行。
所以,awk 'FNR==NR{a[$0];next}!($2 in a)' b.txt a.txt的执行结果为:
5 d
|
|