如何删除大型多 GB 文本文件中的重复行?

如何删除大型多 GB 文本文件中的重复行?

我的问题类似于这个问题但有一些不同的限制:

  • 我有一个很大的\n分隔单词列表——每行一个单词。文件大小范围从 2GB 到最大 10GB。
  • 我需要删除任何重复的行。
  • 该过程可以在删除重复项的过程中对列表进行排序,但这不是必需的。
  • 分区上有足够的空间来保存输出的新的唯一单词列表。

我已经尝试过这两种方法,但它们都因内存不足错误而失败。

sort -u wordlist.lst > wordlist_unique.lst
awk '!seen[$0]++' wordlist.lst > wordlist_unique.lst
awk: (FILENAME=wordlist.lst FNR=43601815) fatal: assoc_lookup: bucket-ahname_str: can't allocate 10 bytes of memory (Cannot allocate memory)

我还可以尝试哪些其他方法?

答案1

-o尝试使用带有/选项的排序--output=FILE而不是重定向输出。您也可以尝试buffer-size使用-S/进行设置--buffer-size=SIZE。另外,尝试-s/ --stable。并阅读手册页,它提供了我提供的所有信息。

您可以使用的完整命令可能适合您正在做的事情:

sort -us -o wordlist_unique.lst wordlist.lst

您可能还想阅读以下 URL:

http://www.gnu.org/s/coreutils/manual/html_node/sort-inspiration.html

这比手册页更彻底地解释了排序。

相关内容