浙江11选5走势图任选:花式挑出兩個文檔中相同的行

浙江11选5任3遗漏 www.ehxis.com 在我們的工作或學習您可能會碰到這樣的情況,需要去比較兩個文本文件,挑出兩個文件中相同的或者不相同的行,可能大家在碰到這樣的需求時,可能會想著用兩層循環去遍歷這兩個文件,然后做比較。用這種思路去解決問題,不管用shell還是python一定是可行的。筆者在這里介紹幾種高效、簡單的方式。

筆者用a.txt和b.txt這兩個文件來加以說明如果找出兩個文件中相同的行。

花式挑出兩個文檔中相同的行

花式挑出兩個文檔中相同的行

從這兩個文檔里可以看出它們有兩同的部分也有不相同的部分。

1.思路:使用cat將兩個文檔連接起來,然后用sort進行計數,再用awk將計數為2的過濾出來

2.使用comm(有的系統上的名字叫common),comm可以找出兩個文件中各自獨有和共同擁有的行,不過comm比較兩個文件之前需要對兩個文件進行排序。

以下是排序后的結果

將兩個文件進行comm比較后,可以看到第一列只顯示了c.txt獨自擁有的行,第二列顯示d.txt擁有的行。第三列顯示是的兩個文件共有的行。

通過使用-1 -2的參數可以去掉第一列和第二列。

3.使用純粹的awk來完成

解釋一下這行命令的意思,NR和FNR的意思相近,NR,表示awk開始執行程序后所讀取的數據行數。FNR,與NR功用類似,不同的是awk每打開一個新文件,FNR便從0重新累計。所以NR==FNR表示如果是第一個文件,即c.txt,NR>FNR表示如果是第二個文件即d.txt。a[$0]就是以每行內容為index的一個hash表;由于執行了++,它的初值變成了0。如果你打印了a[$0],你會發現它其實就是行數的重復次數,后面的NR>FNR&&a[$0],在d.txt文件中并且匹配到與c.txt文件相同的行打印該行(行為語句為空,表示打印該行)。

小結:使用第一種和第二種方法來處理文本比較高效,使用純粹的awk看起來比較復雜,但awk處理起來文本更加靈活多變,理解awk在此處的用法對awk的學習是有幫助的。

 

相關新聞

聯系我們

400-080-6560

在線咨詢:點擊這里給我發消息

郵件:[email protected]

工作時間:周一至周日,09:00-18:30

QR code