%20insensible%20a%20la%20l%C3%ADnea%20en%20Linux%3F.png)
Tengo dos archivos de texto donde no importa el orden de las líneas. Quiero saber las líneas que son diferentes en un archivo a otro. El uso de diff en Linux encuentra la diferencia pero también tiene en cuenta el cambio en las líneas del mismo texto.
En otras palabras, ¿cómo hago una diferencia insensible a la línea?
Respuesta1
Si sus archivos no son demasiado grandes, puede sort
guardarlos antes de diff
iniciar sesión.
Entonces algo como esto funcionaría:
sort file1 > file1_sorted
sort file2 > file2_sorted
diff file1_sorted file2_sorted
O, como has descubierto en los comentarios, también puedes hacerlo en una sola línea,
diff <(sort file1) <(sort file2)
Respuesta2
De manera similar a las diff
opciones, puede usar el comm
comando con las sustituciones de procesos y sort
( comm
requiere que los archivos en los que opera estén ordenados). Esto le permitiría centrarse solo en las líneas comunes, solo en las líneas que están en un archivo u otro usando -1
para suprimir líneas solo en el primer archivo, -2
para suprimir líneas solo en el segundo archivo o -3
para suprimir líneas en ambos, para ver todas las líneas que están solo en el primer archivo y no en el segundo que podrías hacer
comm -23 <(sort file1) <(sort file2)
por supuesto, si quieres eso también puedes considerar usar grep
me gusta
grep -vFxf file2 file1
que tratará las líneas file2
como patrones y solo imprimirá las líneas del archivo1 que no tienen coincidencias ( -v
) cuando trata las líneas de ( -f
) file2
como cadenas fijas ( -F
) que deben coincidir con la línea completa ( -x
).
La grep
solución tiene la ventaja de no necesitar ordenar los archivos, pero sólo busca líneas en uno de los archivos que no estén en el otro, no en ambas direcciones a la vez.