¿Hay un comando unix que pueda verificar si dos líneas en un archivo son iguales?
Por ejemplo, considere un archivo sentences.txt
This is sentence X
This is sentence Y
This is sentence Z
This is sentence X
This is sentence A
This is sentence B
Vemos que la oración
This is sentence X
se repite.
¿Hay algún comando que pueda detectar esto rápidamente, de modo que tal vez pueda ejecutarlo así?
$ cat sentences.txt | thecommand
Line 1:This is sentence X
Line 4:This is sentence X
text-processing
search
Código Azul
fuente
fuente
sort sentences.txt | uniq -d | grep -nFxf - sentences.txt
sería un poco más eficiente y evitaría posiblesarg list too long
problemas.No es exactamente lo que quieres, pero puedes intentar combinar
sort
yuniq -c -d
:2
Aquí está el número de duplicaciones encontradas para la línea, desdeman uniq
:fuente
SI el contenido del archivo cabe en la memoria
awk
es bueno para esto. El one-liner estándar en comp.lang.awk (no puedo buscar una instancia de esta máquina pero hay varias cada mes) para detectar que hay una duplicaciónawk 'n[$0]++'
que cuenta las ocurrencias de cada valor de línea e imprime cualquier ocurrencia (s) que no sea el primero, porque la acción predeterminada esprint $0
.Para mostrar todas las ocurrencias, incluida la primera, en su formato, pero posiblemente en un orden mixto cuando se duplica más de un valor, se vuelve un poco más complicado:
Se muestra en varias líneas para mayor claridad, generalmente se ejecutan juntos en uso real. Si hace esto con frecuencia, puede colocar el
awk
script en un archivoawk -f
o, por supuesto, todo en un script de shell. Como la mayoría simple,awk
esto se puede hacer de manera muy similar conperl -n[a]
.fuente