删除一堆 .txt 文件中的所有重复项

删除一堆 .txt 文件中的所有重复项

我有大约 2000 个 .txt 文件。每个文件的行数不超过 500000 行。大约是40GB。
所有文件都包含单词,每个单词占一个新行。某些文件可能包含相同的单词,其中包含其他文件(也称为重复项)。所以,我需要删除所有重复项,并且每个单词只保留 1 次。
我尝试将所有行写入 1 个文件并使用 awk 模式。像这样:

awk '!seen[$0]++' Documents/* > result.txt

那没有用。它给了我“无法分配内存”错误。
无需将所有内容写入 1 个文件。另外,如果我不仅可以选择唯一的行,还可以选择长度大于 5 且小于 101 个字符的行,那就太好了。我正在尝试在具有 8 VCPU 和 30GB RAM 的机器上执行此操作。
有什么建议么?

答案1

一个简单的

sort -u Documents/*.txt > result.txt

应该这样做。sort已经知道如何处理大于内存的文件,因此您不应该遇到使用 awk 看到的内存不足错误。我必须承认我有点惊讶 awk 内存不足,它是编译为 32 位应用程序吗?

一般来说,使用sort可能比使用该awk '!seen[$1]++'方法慢。您可以通过分组处理文件来恢复速度。

相关内容