$ cat data.txt
aaaaaa
aaaaaa
cccccc
aaaaaa
aaaaaa
bbbbbb
$ cat data.txt | uniq
aaaaaa
cccccc
aaaaaa
bbbbbb
$ cat data.txt | sort | uniq
aaaaaa
bbbbbb
cccccc
$
El resultado que necesito es mostrar todas las líneas del archivo original eliminando todos los duplicados (no solo los consecutivos), manteniendo el orden original de las declaraciones en el archivo .
Aquí, en este ejemplo, el resultado que realmente estaba buscando era
aaaaaa
cccccc
bbbbbb
¿Cómo puedo realizar esta uniqoperación generalizada en general?
text-processing
uniq
Lazer
fuente
fuente

{ if (!seen[$0]++) print }if,print, paréntesis y corchetes:awk '!seen[$0]++''!LarryWall[$0]++'para todas las preocupaciones de awk, pero "visto" ayuda a las personas a comprender mejor el programa.John tiene una herramienta llamada
unique:Lograr lo mismo sin herramientas adicionales en una sola línea de comandos es un poco más complejo:
nlimprime números de línea delante de las líneas, por lo que si nosotrossort/uniqdetrás de ellas, podemos restaurar el orden original de las líneas.sedsimplemente elimina los números de línea después;)fuente
nl -ba -nrz data.txt | sort -k2 -u | sort | cut -f2Prefiero usar esto:
cat -nagrega números de línea,sort --key=2.1 -b -use ordena en el segundo campo (después de los números de línea agregados), ignorando los espacios en blanco iniciales, manteniendo líneas únicassort -nse ordena en estricto orden numéricocut -c8-mantenga todos los caracteres de la columna 8 a EOL (es decir, omita los números de línea que incluimos)fuente
Perl tiene un módulo que puede usar que incluye una función llamada
uniq. Entonces, si tiene sus datos cargados en una matriz en Perl, simplemente llame a la función de esta manera para que sea única, pero aún así mantenga el orden original.Puede leer más sobre este módulo aquí: Lista :: MoreUtils
fuente