使用 sort 和 uniq 删除大文件中的重复行失败

Deduplicating lines in large file fails with sort and uniq

我有一个大文件,其中包含一行 JSON 每行 1563888 行。为了删除这个文件中的行,我一直在使用 shell 单行 sort myfile.json | uniq -u.

对于较小的文件,此方法有效并且 sort myfile.json | uniq -u | wc -l 大于 0。由于文件大小,现在 运行 sort myfile.json | uniq -u | wc -l 生成 0 行,而如果我使用 head -n500000 myfile.json | sort | uniq -u | wc -l有效。

bash有没有简单的方法来处理这么大的文件?还是有一种干净的方法来分块文件?我最初使用 bash 而不是 Python,因为它似乎是一种更简单的快速验证方法,尽管现在我正在考虑将此任务移回 Python。

根据 Kamil Cuk,让我们试试这个解决方案:

sort -u myfile.json 

文件真的是JSON吗?对 JSON 文件进行排序可能会导致可疑的结果。您也可以按照 Mark Setchell 的建议尝试拆分文件。然后您可以对每个拆分文件进行排序,并对结果进行排序。所有种类都应该用 sort -u.

来完成

如果确实是 JSON 文件,请提供 myfile.json 中的一些示例。让我们在这里谈谈您使用 sort -u.

时的结果