Mi pregunta es similar a esta pregunta pero con un par de restricciones diferentes:
- Tengo una gran
\n
lista de palabras delimitadas: una palabra por línea. El tamaño de los archivos varía de 2 GB a 10 GB. - Necesito eliminar cualquier línea duplicada.
- El proceso puede ordenar la lista durante el transcurso de la eliminación de los duplicados, pero no es obligatorio.
- Hay suficiente espacio en la partición para contener la nueva lista de palabras única que se genera.
He intentado ambos métodos, pero ambos fallan con errores de falta de memoria.
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)
¿Qué otros enfoques puedo probar?
linux
text-processing
uniq
gran lobo
fuente
fuente
Respuestas:
Intente usar ordenar con la opción
-o
/ en--output=FILE
lugar de redirigir la salida. También puede intentar configurarlobuffer-size
con-S
/--buffer-size=SIZE
. Además, intente-s
/--stable
. Y lea la página del manual, ofrece toda la información que le di.El comando completo que puede usar que podría funcionar para lo que está haciendo:
También es posible que desee leer la siguiente URL:
http://www.gnu.org/s/coreutils/manual/html_node/sort-invocation.html
Eso explica más a fondo el tipo que la página de manual.
fuente
sort: write failed: /root/tmp/sortVxscLn: No space left on device
. El problema es un poco molesto porque no falla de inmediato. Parece que tiene que esperar a que la memoria se agote antes de que se produzca un error.sort
para usar un sistema de archivos con más espacio libre.