【问题标题】:Fastest way of finding differences between two files in unix?在 unix 中查找两个文件之间差异的最快方法?
【发布时间】:2013-08-05 23:46:57
【问题描述】:

我想找出两个文件之间的差异,然后只将差异放在第三个文件中。我看到了使用 awk、diff 和 comm 的不同方法。还有吗?

例如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.

【问题讨论】:

  • 因为这取决于您的输入,所以最好自己计时
  • 能否请您将您的案例更具体一些,或者提供一些您尝试过的示例代码?
  • 对于案例 2,cmp 逐字节比较两个文件。
  • 您已经有很多选择。使用time 命令找到您的答案。
  • “差异”实际上是未定义的,可能意味着很多事情。至于你的“还有更多吗?”问题:当然,任何人都可以编写一个新程序来找出差异。

标签: linux bash unix


【解决方案1】:

你可以试试..

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

【讨论】:

  • 使用两个大文本文件,其中一个在开头附近有一段额外的文本,我对所有四种方法都进行了计时。 grep、diff 和 join 方法都找不到多余的段落。除了 "" 才能工作。我不熟悉 grep 或 join 方法。结果:comm:3.661s,grep:0.035s,diff:0.051s,join:3.811s
  • 你的答案是错误的。从 file2 中查找 file1 中缺少的内容。正确答案: comm -3
【解决方案2】:

另一种选择:

sort file1 file2 | uniq -u > file3

如果您只想查看重复条目,请使用“uniq -d”选项:

sort file1 file2 | uniq -d > file3

【讨论】:

  • 我最喜欢这个答案,因为它简单、直观,并且不涉及一些复杂的命令行选项/语法。
  • 注意:一个区别是对于不同的行,此uniq 解决方案将打印该行的file1file2 版本。 commgreq 只会打印 file2 版本。
【解决方案3】:

您也可以尝试包含 md5-hash-sums 或类似的东西来确定是否有任何差异。然后,只比较具有不同哈希值的文件...

【讨论】:

  • 但是散列两个文件比比较两个文件更快吗?
【解决方案4】:

这会很快工作:

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

grep -Fxvf File2.txt File1.txt >> File3.txt

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

【讨论】:

    猜你喜欢
    • 2011-04-02
    • 2014-02-02
    • 2011-01-18
    • 1970-01-01
    • 2013-08-06
    • 2023-03-18
    • 2011-06-10
    • 2012-02-08
    • 2016-11-06
    相关资源
    最近更新 更多