这样做的最佳方式是什么?这是一个250GB的文本文件,每行1个字
输入:
123
123
123
456
456
874
875
875
8923
8932
8923
需要输出:
123
456
874
875
8923
8932
我需要获得每个重复行的1个副本,如果有2个相同的行,则删除两个,只删除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%。
难道我做错了什么?
你可以使用sort
来做到这一点。
$ sort -u final.txt > finalnoduplicates.txt
你可以进一步简化这一点,让sort
完成所有这些工作:
$ sort -u final.txt -o finalnoduplicates.txt
最后,由于您的输入文件纯粹只是数字数据,您可以通过sort
开关告诉-n
,以进一步提高此任务的整体性能:
$ sort -nu final.txt -o finalnoduplicates.txt
sort's man page
-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