使用awk对两个文件的对比: 认识:NR和FRN NR:表示当前记录数FNR:也表示当前记录数,但是FNR的作用域只在一个文件内.如果重新打开文件,FNR会从1开始.文件aaaabbbccc文件bee
使用awk对两个文件的对比:
认识:NR和FRN
NR:表示当前记录数FNR:也表示当前记录数,但是FNR的作用域只在一个文件内.如果重新打开文件,FNR会从1开始.文件aaaabbbccc文件beeefffawk '{print NR;print FNR;print $0;}' a #结果如下 1 1 aaa 2 2 bbb 3 3 cccawk '{print NR;print FNR;print $0;}' a b #结果如下 1 1 aaa 2 2 bbb 3 3 ccc 4 1 aaa 5 2 ccc 6 3 ddd**结论:看懂了么,awk在处理两个文件的时候,NR是自动的链接在第一个文件id的后面,FNR是从1重新的开始**
- 当b文件只用一列,a文件有多列。b文件中的当前列和a文件中的其中的一列进行对比
a文件:111 aaa222 bbb333 ccc444 ddd555 eeeb文件aaacccddd判断的方式如下:awk 'NR==FNR{a[$0]}NR>FNR{ if($2 in a) print $0}' b a #找出两文件中相同的值awk 'NR==FNR{a[$0]}NR>FNR{ if(!($2 in a)) print $0}' b a #找出文件2中不同的值
- 当b文件有多列,a文件有多列。b文件中一行和a文件中的其中的一行进行对比
a文件:111 aaa222 bbb333 ccc444 ddd555 eeeb文件:111 aaa222 bbb444 ddd判断的方式如下:awk 'NR==FNR{a[$0]++} NR>FNR&&a[$0]' b a #找出两文件中完全同的行awk 'NR==FNR{a[$0]++} NR>FNR&&!a[$0]' b a #找出两文件中不同的行
- 当文件中有多列, 把文件中也有多列, 并且么有两行是相同的进行对比
aaa文件:111 aaa222 bbb333 ccc444 ddd555 eee555 aaa555 cccbbb文件:aaa a1ccc c1ddd d1判断的方式如下:awk 'NR<=FNR{a[$1]=$2}NR>FNR{print $0,a[$2]}' bbb aaa 注释:是将aaa文件中的第二列和bbb文件中的第一列进行对比如果相同的话就在aaa文件的后面把bbb文件中的第二列给添加上去结果如下:111 aaa a1222 bbb 333 ccc c1444 ddd d1555 eee 555 aaa a1555 ccc c1