Удалить дубликаты из INSANE BIG WORDLIST

Как лучше всего это сделать? Это текстовый файл размером 250 ГБ, по 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 на экране, на котором выполняется эта команда, оно составляет 100%.

Я делаю что-то неправильно?


person Local Host    schedule 03.09.2018    source источник
comment
Я бы потерял бесполезный cat, так как sort вполне способен читать файлы самостоятельно. Я также предлагаю вам использовать опцию -u, чтобы исключить uniq.   -  person Hasturkun    schedule 03.09.2018
comment
Возможный дубликат Как получить уникальные строки из очень большой файл в Linux?   -  person samabcde    schedule 03.09.2018
comment
Тогда кот final.txt | сортировать -у | uniq › finalnoduplicates.txt ?   -  person Local Host    schedule 03.09.2018
comment
Отсортированы ли строки, как вы предлагаете?   -  person AnFi    schedule 03.09.2018
comment
Вероятно, вы видите пустой файл, потому что просматриваете его до того, как sort закончит сортировку, и в него еще ничего не выведено. Сортировка такого количества данных занимает некоторое время. И да, не используйте cat и uniq. В этом нет необходимости; это должно быть сделано с помощью одной программы. А так как ваш файл выглядит полностью числовым, возможно, скажите sort, чтобы он сортировал файл численно: sort -o results.txt -nu file.txt или тому подобное.   -  person Shawn    schedule 03.09.2018
comment
Какой список слов вы использовали?   -  person Hashim Aziz    schedule 09.09.2018


Ответы (1)


Вы можете сделать это, используя только 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
person slm    schedule 04.09.2018
comment
Есть ли какое-то преимущество в использовании -o перед перенаправлением? - person Hashim Aziz; 10.09.2018
comment
@Hashim - некоторые, команда sort создает файл, тогда как перенаправление опирается на оболочку для этого. - person slm; 16.01.2020