2013-08-05 29 views
15

我想找到兩個文件之間的區別,然後只將差異放在第三個文件中。我看到了使用awk,diff和comm的不同方法。還有更多嗎?找到unix中兩個文件之間差異的最快方法?

例如。 Compare two files line by line and generate the difference in another file

例如, Copy differences between two files in unix

我需要知道的是找到所有分歧,並列出它們在一個文件下面的每個案件的最快方法 -

Case 1 - file2 = file1 + extra text appended. 
Case 2 - file2 and file1 are different. 
+7

因爲這取決於您的輸入,它最好自己計算一下 – perreal

+0

你能否讓你的案例更具體一些,或者給出一些你嘗試過的東西的代碼示例? – asf107

+1

對於案例2,有'cmp',它逐字節比較兩個文件。 – micke

回答

39

你可以嘗試..

comm -13 <(sort file1) <(sort file2) > file3 

grep -Fxvf file1 file2 > file3 

diff file1 file2 | grep "<" | sed 's/^<//g' > file3 

join -v 2 <(sort file1) <(sort file2) > file3 
+0

是的,但哪一個最快? – Steam

+1

使用兩個大的文本文件,其中一個文本附近有一段額外的文本,我計時了所有四種方法。 grep,diff和join方法都未能找到額外的段落。除了「<」之外,diff方法需要grep「>」來工作。我不熟悉grep或連接方法。結果:comm:3.661s,grep:0.035s,diff:0.051s,join:3.811s –

+1

@JasonHartley得到一個生活伴侶,這些命令的寫法只有很多種。此外,你所逃避的答案有一個命令,我已經提供了幾個。 – danmc

1

你也可以嘗試包括MD5散列和數或類似做確定是否有任何差異的。然後,只有比較具有不同的散列文件...

+0

我該怎麼做? – Steam

+0

但是比比較兩個文件更快地哈希兩個文件? –

8

另一種選擇:

sort file1 file2 | uniq -u > file3 

如果你想看到的只是重複的條目中使用 「uniq的-d」 選項:

sort file1 file2 | uniq -d > file3 
0

這將工作得很快:

案例1 - File2 = File1 +附加的額外文本。

的grep -Fxvf FILE2.TXT FILE1.TXT >> File3.txt

文件1:80線 文件2:100線 文件3:20行

相關問題