2013-08-05 25 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行

相关问题