2012-04-30 18 views
15

¿Cómo puedo mostrar solo filas diferentes usando diff en un archivo separado?Cómo mostrar solo filas diferentes usando diff (bash)

Por ejemplo, el número de archivo 1 contiene la línea:

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

Un archivo número 2 contiene las siguientes líneas:

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

cómo hacer en las siguientes situaciones?

1;tom;58;2 
+0

lo que debería ocurrir a '1; tom; 56; 2'? ¿El segundo archivo siempre debe tener prioridad? ¿Qué debería pasar si el primer archivo contiene una línea que no está en el segundo archivo? –

Respuesta

29

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 

Uso comm:

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

Las opciones de línea de comandos a comm son bastante recta hacia adelante :

-1 Suppress columna 1 (líneas únicas para ARCHIVO1)

-2 Suprimir la columna 2 (líneas única para ARCHIVO2)

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

+0

Creo que quiere conservar líneas exclusivas para el archivo 2. – codaddict

+0

Sí, noté que - Supuse que el primer archivo tenía prioridad. Se actualizó la publicación –

+3

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

10

Suponiendo que se desea conservar sólo las líneas únicas para presentar 2 que puede hacer:

comm -13 file1 file2 

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

3

Uso de especificadores de formato de grupo puede suprimir la impresión de líneas sin cambios e imprimir sólo las líneas cambiado para cambiarse

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

+0

Esto también funciona bien para cadenas usando <(echo "$ string1") <(echo "$ string2") –

Cuestiones relacionadas