Мой вопрос похож на этот вопрос, но имеет несколько ограничений:
- У меня большой список
\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)
Какие еще подходы я могу попробовать?
linux
text-processing
uniq
greatwolf
источник
источник
Ответы:
Попробуйте использовать сортировку с параметром
-o
/--output=FILE
вместо перенаправления вывода. Вы также можете попробовать установитьbuffer-size
с помощью-S
/--buffer-size=SIZE
. Также попробуйте-s
/--stable
. И прочитайте справочную страницу, она предлагает всю информацию, которую я дал.Полная команда, которую вы можете использовать, может работать на то, что вы делаете:
Вы также можете прочитать следующий URL:
http://www.gnu.org/s/coreutils/manual/html_node/sort-invocation.html
Это более подробно объясняет сортировку, чем справочная страница.
источник
sort: write failed: /root/tmp/sortVxscLn: No space left on device
. Проблема немного раздражает тем, что она не сразу перестает работать. Похоже, вам нужно подождать, пока память не будет исчерпана, прежде чем произойдет ошибка.sort
чтобы использовать файловую систему с большим количеством свободного места.