使用awk比較兩個文件的內容


干貨記錄

[Linux] 使用awk比較兩個文件的內容

當需要比較A , B兩個文件 , A文件中存在 , 並且把也在B文件中存在的行去除掉 , 可以使用這個awk的用法來

 awk  '{if(ARGIND==1) {val[$0]}else{if($0 in val)  delete val[$0]}}END{for(i in val) print i}' A B

使用awk的同時處理多文件功能,配合數組變量來進行處理
先掃描文件A,把文件A中的每行作為數組的key放入數組
再掃描文件B,判斷B中的每行是否存在於數組中,如果存在就刪除這個數組元素
最后統一打印數組中的key

文件准備

創建兩個文件,分別為a.txt和b.txt,它們所含內容分別為:

a.txt b.txt
1-wfhune2-chdamnsbchj3-uyr92fiubkqw5-cgvdnsb 2-djyv4-dvcahsgdb5-wvchdfyt

普通用法,整行對比

命令 diff a.txt b.txt grep -f a.txt b.txt grep -vf a.txt b.txt
解釋 比較兩個文件 取兩個文件中都有的行 取b文件中有,但a文件中沒有的行
結果 1,4c1,3< 1-wfhune< 2-chdamnsbchj< 3-uyr92fiubkqw< 5-cgvdnsb---> 2-djyv> 4-dvcahsgdb 2-djyv4-dvcahsgdb5-wvchdfyt

高級用法,每行關鍵部分對比

回顧一下兩個文件中的內容,格式都是 x-yyyy這種格式,我們認為x為鍵,yyyy為值。現在我們只想比較x,而不關心yyyy。

該怎么辦呢?

命令 grep -vf <(cut -d - -f 1 a.txt) <(cat b.txt) grep -vf <(awk -F"-" '{print $1}' a.txt) <(cat b.txt)
解釋 <() 用於命令嵌套。cut -d - -f 1 a.txt,其中參數-d 用於定義分隔符,參數-f 用於定義分割后要提取第幾段文本。比如這里定義分隔符為"-",並提取分割后的第一段文本。 這里只是用awk命令替換了cut命令,作用相同。awk 的 -F參數用於定義分隔符,printf $X 提取分割后的第X段文本。
結果 4-dvcahsgdb 4-dvcahsgdb


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM