$ 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 uniq
operació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:
nl
imprime números de línea delante de las líneas, por lo que si nosotrossort
/uniq
detrás de ellas, podemos restaurar el orden original de las líneas.sed
simplemente elimina los números de línea después;)fuente
nl -ba -nrz data.txt | sort -k2 -u | sort | cut -f2
Prefiero usar esto:
cat -n
agrega números de línea,sort --key=2.1 -b -u
se 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 -n
se 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