diff消耗大量内存和cpu

Cha*_*hap 5 diff text-processing

我有两个文件,all.txt(525,953,272 条记录)和subset.txt(525,298,281 条记录)。每条记录只不过是一个 17 位的 ASCII 整数。两个文件都已排序,每个文件中的重复记录已被删除。subset.txt 中的每个值也存在于all.txt 中。我希望能够找到的记录全部.txt不在subset.txt

我试图diff在这两个文件之间运行 a ,认为它会写出all.txt 中的行,但不是subset.txt 中的行。该机器有64GB的内存。在diff已经运行了一个半小时,目前已获得有关内存的75%。

任何人都可以推测可能会发生什么,以及是否有论据diff可能会有所帮助?这难道不是diff我应该做的,我应该使用不同的方法吗?

Jef*_*ler 2

任何人都可以推测可能会发生什么,以及 diff 是否有可能有帮助的论点?这不是 diff 的本意吗?我应该使用不同的方法吗?

这不是diff本意要做的事;当输入已排序(如您所见)后,该作业的工具是comm

$ seq 10 15 > subset.txt
$ seq 10 20 > all.txt
$ comm -13 subset.txt all.txt
16
17
18
19
20
Run Code Online (Sandbox Code Playgroud)

的选项comm有点不寻常,因为它们会关闭输出。第 1 列包含文件 1 特有的行;第 2 列包含文件 2 特有的行;第 3 列的行是两者“共有”的。通过使用选项,-13我们要求 comm 向我们显示仅在“all.txt”中的行。