Es posible que desee ver las aplicaciones uniq
y sort
.
./yourscript.ksh | ordenar | uniq
(Para su información, sí, el orden es necesario en esta línea de comando, uniq
solo elimina las líneas duplicadas que están inmediatamente una detrás de la otra)
EDITAR:
Contrariamente a lo publicado por Aaron Digulla en relación con uniq
las opciones de la línea de comandos:
Dada la siguiente entrada:
clase
tarro
tarro
tarro
compartimiento
compartimiento
Java
uniq
generará todas las líneas exactamente una vez:
clase
tarro
compartimiento
Java
uniq -d
mostrará todas las líneas que aparecen más de una vez y las imprimirá una vez:
tarro
compartimiento
uniq -u
generará todas las líneas que aparecen exactamente una vez, y las imprimirá una vez:
clase
Java
sort
presenta una-u
versión para dar valores únicos también.uniq
costuras solo procesan líneas adyacentes (al menos por defecto), lo que significa que se puedesort
ingresar antes de alimentaruniq
.Esto es lo mismo que la respuesta de monóxido , pero un poco más conciso.
fuente
... | sort | uniq
porque se realiza de una sola vezPara conjuntos de datos más grandes donde la ordenación puede no ser deseable, también puede usar el siguiente script perl:
Básicamente, esto solo recuerda cada salida de línea para que no vuelva a salir.
Tiene la ventaja sobre la "
sort | uniq
" solución en que no se requiere clasificación por adelantado.fuente
Con zsh puedes hacer esto:
O puedes usar AWK:
fuente
awk
solución muy inteligente pero críptica (consulte stackoverflow.com/a/21200722/45375 para obtener una explicación) funcionará con archivos grandes siempre que el número de líneas únicas sea lo suficientemente pequeño (ya que las líneas únicas se mantienen en la memoria ) Lazsh
solución lee primero todo el archivo en la memoria, lo que puede no ser una opción con archivos grandes. Además, como está escrito, solo las líneas sin espacios incrustados se manejan correctamente; para arreglar esto, useIFS=$'\n' read -d '' -r -A u <file; print -l ${(u)u}
en su lugar.(IFS=$'\n' u=($(<infile)); print -l "${(u)u[@]}")
[@]
sufijo para hacer referencia a todos los elementos de una matriz, parece que, al menos a partir de la versión 5, funciona sin él; o simplemente lo agregaste para mayor claridad?print -l "${(fu)$(<infile)}"
awk
salida de muestra.Conducirlos a través de
sort
yuniq
. Esto elimina todos los duplicados.uniq -d
da solo los duplicados,uniq -u
da solo los únicos (tiras duplicadas).fuente
uniq -u
NO es el comportamiento predeterminado (ver la edición en mi respuesta para más detalles)Con AWK puedes hacerlo, lo encuentro más rápido que ordenar
fuente
Único, según lo solicitado, (pero no ordenado);
utiliza menos recursos del sistema para menos de ~ 70 elementos (según lo probado con el tiempo);
escrito para recibir información de stdin,
(o modificar e incluir en otro script):
(Bash)
fuente
Recibo mejores consejos para obtener entradas no duplicadas en un archivo
fuente