2013-08-18 23 views
0

在Linux中,如何合併兩個文件並只保留兩個文件中匹配的行?在Linux上合併兩個文件,只保留出現在兩個文件中的行

每行由一個換行符分隔(\n)。

到目前爲止,我找到了sort吧,然後用comm -12。這是最好的方法(假設它是正確的)?

的fileA包含

aaa 
bbb 
ccc 
ddd 

FILEB包含

aaa 
ddd 
eee 

,我想一個新的文件包含

aaa 
ddd 
+0

見http://stackoverflow.com/questions/746458/how-to-show-lines-in-common -reverse-diff – elmov

+1

如果排序是一個選項(或文件已經排序),那麼'sort'加'comm'就是要走的路。 –

+0

另請參見[Unix命令查找兩個文件中常見的行](http://stackoverflow.com/questions/373810/unix-command-to-find-lines-common-in-two-files/373819#373819)。 –

回答

2

前提是你的兩個輸入文件都是lexicographically sorted,你確實可以使用comm

$ comm -12 fileA fileB > fileC 

如果不是的話,你應該sort輸入文件第一:

$ comm -12 <(sort fileA) <(sort fileB) > fileC