2010-05-14 126 views
10

如何通過比較兩個文本文件使用linux命令獲得以下輸出?謝謝。比較兩個文件並獲得相同行的輸出

文件1:

site110 
site120 

文件2(更新):

domain1.com - site110 
domain2.com - site111 
domain3.com - site112 
domain4.com - site113 
domain5.com - site120 
domain6.com - site1201 
domain7.com - site1202 

輸出:

domain1.com - site110 
domain5.com - site120 

如果我使用:

grep -f file1 file2 

輸出將是:

domain1.com - site110 
domain5.com - site120 
domain6.com - site1201 
domain7.com - site1202 

其中最後兩行是不是我想要的。謝謝。

+0

沒有必要添加「[已解決]」,系統有它自己的指標。 – 2010-05-14 19:08:05

+0

謝謝。我喜歡SO系統。 :) – garconcn 2010-05-18 20:16:50

+0

我在這裏也不能使'grep -f'工作,但是如果我在'grep'命令中加上'-w'就可以。 – Thor 2012-09-08 20:38:42

回答

13

grep manpage

-f FILE, --file=FILE 
      Obtain patterns from FILE, one per line. The empty file 
      contains zero patterns, and therefore matches nothing. (-f is 
      specified by POSIX.) 

因此:

grep -f file1 file2 

domain1.com - site110 
domain5.com - site120 
+0

我之前嘗試過grep -f file1 file2,但它在我的腳本上無法正常工作。我認爲這是行不通的。現在,我已經修復了我的腳本。謝謝。 – garconcn 2010-05-14 18:18:28

+0

這裏匹配'site1201',但是如果我在'grep'命令中加了'-w'就行了。 – Thor 2012-09-08 20:37:57

0

diff怎麼樣?

+0

起初,我認爲diff可以解決我的問題,但我不知道使用哪個選項。謝謝。 – garconcn 2010-05-14 18:20:31

0

可能是man paste?一些輸出處理可能是需要的。

3

使用comm命令。

comm -12 < (sort file1) < (sort file2) 

該命令比grep -f更準確。

+0

喜歡這個,謝謝!對於目錄也很好:comm -12 <(ls -1 dir1/| sort)<(ls -1 dir2/| sort) – Nitro 2016-09-27 17:00:46

1

我想你正在尋找一種數據庫連接函數。 Unix有一個命令:join。在你的情況下:

join -1 1 -2 3 -t " " -o 2.1,2.2,2.3 file1 file2 
相關問題