使用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