【问题标题】:Comparing large text files比较大文本文件
【发布时间】:2014-05-07 06:44:56
【问题描述】:

我必须比较大文本文件以确定 file1 和 file2 之间的区别。每个文件都包含域名。文件大小:2GB。

Content sample:

domain1.com
domain2.com

我更喜欢使用 unix 工具来获取结果。基本上我想输出file1中的所有行,这些行在file2中不存在。一般来说,我想要完成的是确定过期域的列表。

提前致谢。

【问题讨论】:

标签: unix awk sed compare diff


【解决方案1】:

首先我会尝试以下方法:

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

这将为您提供仅在 file2 中出现的行。考虑到单行输入的工作量很小,您可能会惊讶于这实际上有多快。

如果这是您经常做的事情,最好保持文件排序,然后您可以发送至comm。如果您的文件包含许多重复项,您还可以通过在排序后执行| uniq 来节省一些时间。

【讨论】:

  • -12 将仅返回两个文件中都存在的行。 -13 将返回 file2 独有的行。
  • 它确实应该是 -13,但方式不同:comm -13
  • 您确定文件顺序吗? man comm 说这些列是“(1)仅在file1中的行;(2)仅在file2中的行;和(3)两个文件中的行。”根据您的问题,您只需要 file2 中的行,所以我们想要第 2 列,这意味着我们需要隐藏第 1 列和第 3 列。
  • 我已将答案编辑为 -13 而不是 -12
【解决方案2】:

你可以试试diff

diff file1 file2

【讨论】:

  • 如果文件没有排序,这将无法正常工作,如果有,则比comm慢。
【解决方案3】:

使用 grep,您可以指定一个文件以从 (-f file1) 读取模式并通过 -v 否定输出,即打印不匹配:

grep -v -f file1 file2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-22
    • 1970-01-01
    • 2017-06-23
    • 2023-04-07
    • 1970-01-01
    • 2011-12-02
    • 1970-01-01
    相关资源
    最近更新 更多