【发布时间】:2018-09-03 15:35:42
【问题描述】:
这样做的最佳方法是什么?这是一个 250GB 的文本文件,每行 1 个单词
输入:
123
123
123
456
456
874
875
875
8923
8932
8923
想要的输出:
123
456
874
875
8923
8932
如果有 2 条相同的行,我需要为每条重复的行获取 1 个副本,删除两个,只删除 1 个,始终保留 1 个唯一行。
我现在做什么:
$ cat final.txt | sort | uniq > finalnoduplicates.txt
在屏幕中,这有效吗?我不知道,因为当我检查输出文件的大小时,它是 0:
123user@instance-1:~$ ls -l
total 243898460
-rw-rw-r-- 1 123user 249751990933 Sep 3 13:59 final.txt
-rw-rw-r-- 1 123user 0 Sep 3 14:26 finalnoduplicates.txt
123user@instance-1:~$
但是当我检查 htop 运行此命令的屏幕的 cpu 值是 100% 时。
我做错了吗?
【问题讨论】:
-
我会失去无用的
cat,因为sort完全能够自行读取文件。我还建议您使用-u选项来消除uniq。 -
那么 "cat final.txt | sort -u | uniq > finalnoduplicates.txt" ?
-
这些行是否按照您的示例进行排序?
-
您可能会看到一个空文件,因为您在
sort完成排序之前正在查看它,并且尚未输出任何内容。对这么多数据进行排序需要一段时间。而且,是的,不要使用cat和uniq。这两个都不需要;它应该用一个程序来完成。而且由于您的文件看起来全是数字,因此可能会告诉sort,以便它按数字对文件进行排序:sort -o results.txt -nu file.txt或类似的。