亚洲熟女综合色一区二区三区,亚洲精品中文字幕无码蜜桃,亚洲va欧美va日韩va成人网,亚洲av无码国产一区二区三区,亚洲精品无码久久久久久久

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

在我們的工作或?qū)W習(xí)您可能會碰到這樣的情況,需要去比較兩個文本文件,挑出兩個文件中相同的或者不相同的行,可能大家在碰到這樣的需求時,可能會想著用兩層循環(huán)去遍歷這兩個文件,然后做比較。用這種思路去解決問題,不管用shell還是Python一定是可行的。筆者在這里介紹幾種高效、簡單的方式。

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

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

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

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

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

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

以下是排序后的結(jié)果

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

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

3.使用純粹的awk來完成

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

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

 

相關(guān)新聞

歷經(jīng)多年發(fā)展,已成為國內(nèi)好評如潮的Linux云計(jì)算運(yùn)維、SRE、Devops、網(wǎng)絡(luò)安全、云原生、Go、Python開發(fā)專業(yè)人才培訓(xùn)機(jī)構(gòu)!