Як видалити повторювані рядки у великому текстовому файлі з кількома ГБ?


16

Моє запитання схоже на це питання, але має декілька різних обмежень:

  • У мене є великий \nрозділений список слів - одне слово на рядок. Розмір файлів коливається від 2 ГБ до 10 ГБ.
  • Мені потрібно видалити всі повторювані рядки.
  • Процес може сортувати список під час вилучення дублікатів, але це не потрібно.
  • На розділі є достатньо місця для розміщення нового унікального списку слів.

Я спробував обидва ці методи, але вони обидва не вдається з помилками в пам'яті.

sort -u wordlist.lst > wordlist_unique.lst
awk '!seen[$0]++' wordlist.lst > wordlist_unique.lst
awk: (FILENAME=wordlist.lst FNR=43601815) fatal: assoc_lookup: bucket-ahname_str: can't allocate 10 bytes of memory (Cannot allocate memory)

Які ще підходи я можу спробувати?


Перегляньте рішення, використовуючи awk unix.stackexchange.com/a/30178/56820
ezdazuzena

Відповіді:


18

Спробуйте використати сортування з -o/ --output=FILEопцією замість перенаправлення виводу. Ви також можете спробувати встановити значення buffer-sizeза допомогою -S/ --buffer-size=SIZE. Також спробуйте -s/ --stable. І прочитайте сторінку man, вона пропонує всю інформацію, яку я дав.

Повна команда, яку ви можете використовувати, яка може працювати для того, що ви робите:

sort -us -o wordlist_unique.lst wordlist.lst

Ви також можете прочитати таку URL-адресу:

http://www.gnu.org/s/coreutils/manual/html_node/sort-invocation.html

Це більш докладно пояснює сорт, ніж сторінка man.


дякую за пропозицію, на жаль, використовуючи - izlaz все ще не виправляє помилку пам'яті. Біг, який все ще дає мені sort: write failed: /root/tmp/sortVxscLn: No space left on device. Проблема трохи дратує те, що вона не виходить з ладу відразу. Схоже, вам доведеться чекати, поки пам’ять вичерпається, перш ніж вона вийде з ладу.
greatwolf

8
@Victor T .: Це не помилка пам’яті, а помилка місця на диску. Чи є / root в іншій файловій системі для ваших даних? Якщо так, скористайтеся опцією -T / - тимчасовий каталог sortдля використання файлової системи з більше вільного місця.
camh

@camh спасибі, що зробив трюк. Не зрозуміли, що ви можете вказати, який проміжний буфер використовувати.
greatwolf
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.