Moje pytanie jest podobne do tego pytania, ale ma kilka różnych ograniczeń:
- Mam dużą
\n
ograniczoną listę słów - jedno słowo w wierszu. Rozmiar plików wynosi od 2 GB do nawet 10 GB. - Muszę usunąć wszelkie zduplikowane linie.
- Proces może sortować listę podczas usuwania duplikatów, ale nie jest to wymagane.
- Na partycji jest wystarczająca ilość miejsca, aby pomieścić nową unikalną listę słów.
Próbowałem obu tych metod, ale oba kończą się błędami braku pamięci.
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)
Jakie inne podejścia mogę wypróbować?
linux
text-processing
uniq
wilk
źródło
źródło
Odpowiedzi:
Spróbuj użyć sortowania z opcją
-o
/--output=FILE
zamiast przekierowywać dane wyjściowe. Możesz także spróbować ustawić zabuffer-size
pomocą-S
/--buffer-size=SIZE
. Spróbuj także-s
/--stable
. I przeczytaj stronę podręcznika, zawiera wszystkie informacje, które podałem.Pełne polecenie, którego możesz użyć, które może działać w przypadku tego, co robisz:
Możesz także przeczytać następujący adres URL:
http://www.gnu.org/s/coreutils/manual/html_node/sort-invocation.html
To dokładniej wyjaśnia rodzaj niż stronę podręcznika.
źródło
sort: write failed: /root/tmp/sortVxscLn: No space left on device
. Problem jest trochę denerwujący, ponieważ nie zawodzi od razu. Wygląda na to, że musisz poczekać na wyczerpanie się pamięci, zanim wystąpi błąd.sort
aby użyć systemu plików z większą ilością wolnego miejsca.