Удаление повторяющихся строк из очень большого текстового файла [дубликат]

этот вопрос уже есть ответ здесь:

У меня очень большой текстовый файл (> 50 ГБ), но большинство строк дублируются, поэтому я хочу их удалить. Есть ли способ удалить дубликаты строк из файла и обрабатывать файлы > 2 ГБ? Потому что каждый метод, который я нашел до сих пор, может работать только с небольшими файлами.

13
задан Der Hochstapler
04.12.2022 11:18 Количество просмотров материала 3204
Распечатать страницу

2 ответа

предполагая, что все строки короче 7 КБ, и что у вас установлены bash, dd, tail, head, sed и sort из cygwin/unix:

{
  i=0
  while LANG= dd 2>/dev/null bs=1024 skip=${i}000 if=large_text_file count=1021 \
  | LANG= sed -e '1d' -e '$d'  | LANG= sort -u ;
  do
    i=$((1+$i))
  done
  LANG= dd 2>/dev/null bs=1024 skip=${i}000 if=large_text_file count=1021 \
  | LANG= tail -n 1
  LANG= head -n 1 large_text_file
} | LANG= sort -u > your_result

это делит файл на куски по 1024000 байт, а также добавляет 3*7*1024 байты ("21" в 1021) из следующего блока. Как подразделения могут вырезать линию, сначала (1d) и последней ($d) строки каждого куска уничтожаются (sed).

таким образом, чтобы компенсировать, что-то, содержащее последний кусок, извлекается снова и только последний строка сохраняется (хвост-n 1), и первая строка также извлекается снова (голова-n 1).

при сбое цикла был извлечен последний кусок.

sort -u можно рассматривать как компрессор, но он только сортирует его вход, а затем пропускает дубликаты. Первая "сортировка" сжимает все куски. Второй sort сжимает снова конкатенации всех этих кусков (и что второй sort отсутствовал сверху код с третьего редактирования, извините).

Вы сказали, что текст файл, но я все равно предполагаю двоичный, отсюда и LANG= (становится все быстрее).

4
отвечен user2987828 2022-12-05 19:06

запустите экземпляр linux в AWS / GCE и используйте uniq. OSX имеет его также...

документы здесь: http://www.thegeekstuff.com/2013/05/uniq-command-examples/

0
отвечен Clustermagnet 2022-12-05 21:23

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх