【问题标题】:Removing duplicates from BIG text file从 BIG 文本文件中删除重复项
【发布时间】:2013-12-13 20:37:35
【问题描述】:

我有一个相当大的文本文件,平均 30GB。我想从此文件中删除重复的行。什么是一个很好的有效算法来做到这一点。对于小文件,我通常使用字典,例如 Python 字典来存储唯一键。但这次文件相当大。任何语言建议都可以。 (我正在考虑使用 C?还是它不是依赖于语言,而是更重要的算法?)。谢谢

【问题讨论】:

  • 使用uniq 命令
  • sort $file | uniq 如果您不关心订单; uniq $file 如果保证重复是连续的。
  • @VectorGorgoth sort -u $file 怎么样?
  • @Macattack 我总是因为某种原因忘记了那个标志。
  • 是的,对我来说最好的方法是 sort -u $file

标签: python c perl shell duplicates


【解决方案1】:

如果您不能在亚马逊上启动一个具有足够内存以将所有内容保存在 RAM 中的实例,我会使用以下策略:

第 1 步 - 为每一行生成校验和/哈希值。我可能会使用 SIPHASH。将这些输出到文件中。

第 2 步 - 对 siphash 值文件进行排序,并丢弃任何只有一个条目的文件。将结果输出为一组哈希值和匹配数。

第 3 步 - 通读文件。为每一行重新生成哈希值。如果它有匹配的行,请在内存中保留它。如果内存中已经存在另一个具有相同哈希值的内容,请进行比较以查看这些行本身是否匹配。如果为真,则输出“匹配”。如果您已经看到所有 N 行具有相同的哈希值并且它们不匹配,请继续处理记录。

此策略取决于重复数仅占总行数的一小部分。如果不是这样,那么我会使用其他策略,例如分而治之。

【讨论】:

    猜你喜欢
    • 2013-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-17
    • 2015-08-29
    相关资源
    最近更新 更多