Удалить дубликаты из безумного большого WORDLIST - PullRequest
0 голосов
/ 03 сентября 2018

Каков наилучший способ сделать это? Это текстовый файл объемом 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%.

Я что-то не так делаю?

1 Ответ

0 голосов
/ 04 сентября 2018

Вы можете сделать это, используя sort.

$ sort -u final.txt > finalnoduplicates.txt

Вы можете еще больше упростить это, просто sort сделает все это:

$ sort -u final.txt -o finalnoduplicates.txt

Наконец, поскольку ваш входной файл представляет собой просто числовые данные, вы можете указать sort с помощью переключателя -n, чтобы еще больше повысить общую производительность этой задачи:

$ sort -nu final.txt -o finalnoduplicates.txt
Справочная страница сортировки
   -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
...