GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo mostrar solo filas diferentes usando diff (bash)

a.txt:

1;john;125;3
1;tom;56;2
2;jack;10;5

b.txt:

1;john;125;3
1;tom;58;2
2;jack;10;5

Usar comunicación:

comm -13 a.txt b.txt 
1;tom;58;2

Las opciones de la línea de comando para comm son bastante sencillos:

-1 suprime la columna 1 (líneas exclusivas de FILE1)

-2 suprimir la columna 2 (líneas exclusivas de FILE2)

-3 suprimir la columna 3 (líneas que aparecen en ambos archivos)


Aquí hay una solución simple que creo que es mejor que diff :

sort file1 file2 | uniq -u

  • sort file1 file2 concatena los dos archivos y los ordena
  • uniq -u imprime las líneas únicas (que no se repiten). Requiere que la entrada esté preordenada.

Usando especificadores de formato de grupo, puede suprimir la impresión de líneas sin cambios e imprimir solo líneas modificadas para cambiar

diff --changed-group-format="%>" --unchanged-group-format="" file1 file2


Suponiendo que desea conservar solo las líneas exclusivas del archivo 2, puede hacer:

comm -13 file1 file2

Tenga en cuenta que el comm El comando espera que los dos archivos estén ordenados.


Linux
  1. Cómo hacer una comparación línea por línea de archivos en Linux usando el comando diff - Parte II

  2. Cómo hacer una comparación línea por línea de archivos en Linux usando el comando diff

  3. ¿Cómo escribir un entero en un archivo binario usando Bash?

  4. comando diff para obtener solo el número de líneas diferentes

  5. ¿Cómo listar carpetas usando comandos bash?

Cómo mostrar hojas de trucos de comandos de Linux usando, por ejemplo

Cómo mostrar el historial de Bash sin números de línea

Cómo mostrar la información de la CPU de Linux usando CPUFetch

Cómo descargar solo audio usando youtube-dl

¿Cómo seguir la salida -f con colores usando solo Awk y mostrar el resto de la salida?

¿Cómo edito líneas anteriores en un comando de varias líneas en Bash?