Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 从疯狂的大字表中删除重复项_Linux_Sorting_Debian_Uniq - Fatal编程技术网

Linux 从疯狂的大字表中删除重复项

Linux 从疯狂的大字表中删除重复项,linux,sorting,debian,uniq,Linux,Sorting,Debian,Uniq,这样做的最佳方式是什么?这是一个250GB的文本文件,每行1个字 输入: 123 123 123 456 456 874 875 875 8923 8932 8923 需要输出: 123 456 874 875 8923 8932 我需要得到一个副本的每一个重复行我不想如果有两个相同的行,删除两个,只是删除1,始终保持一个唯一的行 我现在做的是: $ cat final.txt | sort | uniq > finalnoduplicates.txt 在屏幕上,这是否正常工作?我不

这样做的最佳方式是什么?这是一个250GB的文本文件,每行1个字

输入:

123
123
123
456
456
874
875
875
8923
8932
8923
需要输出:

123
456
874
875
8923
8932
我需要得到一个副本的每一个重复行我不想如果有两个相同的行,删除两个,只是删除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时,运行该命令的屏幕的cpu值为100%


我做错什么了吗?

您可以使用排序来完成这项工作

$ sort -u final.txt > finalnoduplicates.txt
您可以进一步简化此操作,只需让
sort
完成所有操作:

$ sort -u final.txt -o finalnoduplicates.txt
最后,由于您的输入文件纯粹是数字数据,您可以通过
-n
开关告诉
排序
,以进一步提高此任务的整体性能:

$ sort -nu final.txt -o finalnoduplicates.txt
sort的手册页
我会失去无用的
cat
,因为
sort
完全可以自己读取文件。我还建议您使用
-u
选项来消除
uniq
。可能与“cat final.txt | sort-u | uniq>finalnoduplicates.txt”重复?行是否按示例所示进行了排序?您可能看到一个空文件,因为您在
sort
完成排序之前查看了该文件,但尚未向其输出任何内容。整理这么多数据需要一段时间。而且,是的,不要使用
cat
uniq
。这两个方面都不需要;它应该用一个程序来完成。由于您的文件看起来都是数字,可能会告诉
sort
,这样它会对文件进行数字排序:
sort-o results.txt-nu file.txt
或诸如此类。使用
-o
比重定向有什么好处吗?@Hashim-some,
sort
命令正在进行文件构造,而重定向依赖于shell来完成。
   -n, --numeric-sort
          compare according to string numerical value

   -u, --unique
          with -c, check for strict ordering; without -c, output only the
          first of an equal run

   -o, --output=FILE
          write result to FILE instead of standard output