awk file1 file2问题总结:
如下有两个文本
file1
aaa 111
bbb 222
ccc 333
ddd 444
file2
aaa 111
bbb 222
ccc 333
ddd 444
eee 555
要求1:合并文件file1和file2并且将重复的行排除掉
awk 'NR==FNR{a[$0]=1;print $0}NR>FNR&&(!a[$0]++){print $0}' file1 file2
解释:
当NR==FNR的时候,读取的是第一个文件file1,a[$0]=1;print $0为把所有的数组内容全部就行输出,就输出了第一个文件中的所有的内容。当NR>FNR的时候,读取的是第二个文件,!a[$0]++的为如果这个字符串在第一个文件中没有出现过,那么a[$0]的值为0,前面取反的话为1,这时候执行后面的action,会输出。如果$0出现过,那么a[$0]的值就是1,取反的结果为0,就不会进行输出。
要求2:判断file1中有的内容而file2中没有的内容,并进行输出
awk ‘NR==FNR{a[$0]=1}NR>FNR&&(!a[$0]++){print $0}’ file1 file2
解释参照上面。