使用awk对两个文件的对比:code
认识:NR和FRN作用域
NR:表示当前记录数 FNR:也表示当前记录数,可是FNR的做用域只在一个文件内.若是从新打开文件,FNR会从1开始. 文件a aaa bbb ccc 文件b eee fff awk '{print NR;print FNR;print $0;}' a #结果以下 1 1 aaa 2 2 bbb 3 3 ccc awk '{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从新的开始**
a文件: 111 aaa 222 bbb 333 ccc 444 ddd 555 eee b文件 aaa ccc ddd 判断的方式以下: 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中不一样的值
a文件: 111 aaa 222 bbb 333 ccc 444 ddd 555 eee b文件: 111 aaa 222 bbb 444 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 aaa 222 bbb 333 ccc 444 ddd 555 eee 555 aaa 555 ccc bbb文件: aaa a1 ccc c1 ddd d1 判断的方式以下: awk 'NR<=FNR{a[$1]=$2}NR>FNR{print $0,a[$2]}' bbb aaa 注释:是将aaa文件中的第二列和bbb文件中的第一列进行对比 若是相同的话就在aaa文件的后面把bbb文件中的第二列给添加上去 结果以下: 111 aaa a1 222 bbb 333 ccc c1 444 ddd d1 555 eee 555 aaa a1 555 ccc c1