Usar comm para ver líneas en común y diferentes

Si tenemos que comparar el contenido de dos archivos, probablemente querramos saber qué líneas tienen en común. Para lograr eso, Linux nos provee varias alternativas. En primer lugar, en este post aprenderemos a usar comm. Esta herramienta nos permitirá visualizar las líneas comunes, y también aquellas que solamente estén presentes en uno de los archivos. En Linux, ¡con un solo comando podremos realizar esta tarea!

Cómo usar comm

Para empezar, crearemos dos archivos en los que a propósito incluiremos líneas con el mismo contenido en ambos. Les daremos el nombre de archivo1 y archivo2, con los siguientes contenidos en cada uno:

archivo1:

Fulano
David
Mengano
Roberto
Juan
Pepe
Alberto
Armando
Esteban
Julio

archivo2:

Gabriel
Suntano
Miguel
Fulano
David
Sancho
Pepe
Fabricio
Toto
Ale

Si ambos archivos estuvieran ordenados previamente (lo cual vemos que no sucede en archivo1 y archivo2), podríamos simplemente ejecutar

comm archivo1 archivo2

En este caso tenemos que ordenar el contenido de los archivos de alguna manera antes de que comm los procese. Por eso, utilizaremos sort y redirigiremos el contenido ordenando a comm:

comm <(sort archivo1) <(sort archivo2)

En el próximo apartado analizaremos el resultado del comando anterior y de comm en general.

Los resultados

A continuación, veamos en la Fig. 1 la comparación de archivo1 y archivo2:

Usar comm para ver diferencias y contenido común en dos archivos
Figura 1 – Usar comm para ver diferencias y contenido común en dos archivos

En las columna 1 y 2 podemos ver las líneas específicas de archivo1 y archivo2, respectivamente. Por otro lado, en la columna 3 vemos el contenido común de ambos. Este es el comportamiento por defecto de esta herramienta.

Si quisiéramos mostrar parte de esta información (por ejemplo, las líneas que aparecen en uno solo de los archivos, o los que aparecen en ambos solamente) podemos utilizar colocar los números de las columnas que deseamos omitir. Por ejemplo,

comm -12 <(sort archivo1) <(sort archivo2)

nos devolverá únicamente las líneas presentes en ambos archivos (notar que -12 significa omitir las columnas 1 y 2).

¡Nos leemos en breve!

¡Aprovechá la oportunidad de suscribirte al blog para recibir en tu correo el post nuestro de cada día, novedades, y promociones exclusivas!