A menudo es útil comparar versiones de archivos de texto. Para los administradores de sistemas y desarrolladores de software, esto es especialmente importante. Un administrador del sistema puede, por ejemplo, necesitar comparar un archivo de configuración existente con una versión anterior para diagnosticar un problema del sistema. Del mismo modo, un programador necesita con frecuencia ver qué cambios se han realizado en los programas a lo largo del tiempo.
El comunicador La utilidad muestra una comparación línea por línea de dos archivos ordenados. La primera de las tres columnas que muestra enumera las líneas que se encuentran solo en el archivo 1, la segunda columna enumera las líneas que se encuentran solo en el archivo 2 y la tercera enumera las líneas comunes a ambos archivos. La sintaxis básica para el comando "comm" es:
# comm [options] file1 file2
Argumentos
Los argumentos file1 y file2 son nombres de ruta de los archivos que comm compara. El uso de un guión (-) en lugar de archivo1 o archivo2 hace que comm lea la entrada estándar en lugar de ese archivo.
Opciones
Puedes combinar las opciones. Sin opciones, comm produce una salida de tres columnas.
Opciones | Función |
---|---|
-1 | No muestra la columna 1 (no muestra las líneas que se encuentran solo en el archivo 1). |
-2 | No muestra la columna 2 (no muestra las líneas que se encuentran solo en el archivo 2). |
-3 | No muestra la columna 3 (no muestra las líneas que se encuentran en ambos archivos). |
-i | Comparación de líneas que no distingue entre mayúsculas y minúsculas. |
– -verificar orden | Verifique el orden de la entrada, incluso si todas las líneas de entrada son emparejables |
– -nocheck-order | Ignorar el orden de la entrada |
– -output-delimiter=STR | delimita columnas con delimitador "STR" |
– -ayuda | Muestra un menú de ayuda |
– -versión | Mostrar información de la versión del comando |
Ejemplos del uso del comando "comm" en Linux
Ejemplo 1:Uso básico
Veamos un ejemplo básico del comando "comm" para comparar 2 archivos ordenados. Los archivos son como se muestra a continuación:
# cat file1 aa bb cc dd
# cat file2 cc xx yy zz
El comando com compara los archivos línea por línea y genera las líneas que son idénticas. Por ejemplo:
# comm file1 file2 aa bb cc dd xx yy zz
La salida de este comando se muestra en tres columnas:la columna 1 muestra las líneas solo en el archivo 1 (aa, bb, dd), la columna 2 muestra todas las líneas solo en el archivo 2 (xx, yy, zz) y la columna 3 muestra todas las líneas que son iguales entre las dos archivos (cc). Esta es una comparación mucho más detallada que con diff, y el resultado puede ser abrumador cuando todo lo que desea es buscar o verificar uno o dos cambios simples. Sin embargo, puede ser increíblemente útil cuando no está muy familiarizado con ninguno de los archivos y quiere ver cómo se comparan.
Ejemplo 2:Suprimir las columnas
comm admite opciones en la forma -n donde n es 1, 2 o 3. Cuando se usan, estas opciones especifican qué columna(s) suprimir. Por ejemplo, si quisiéramos generar solo las líneas compartidas por ambos archivos, suprimiríamos la salida de las columnas 1 y 2:
# comm -12 file1 file2 cc
De manera similar, solo puede mostrar las líneas que solo están presentes en el archivo 1 y el archivo 2 respectivamente usando los comandos a continuación.
# comm -23 file1 file2 aa bb dd
# comm -13 file1 file2 xx yy zz
Ejemplo 3:Comprobación de clasificación en la entrada
El comando comm proporciona 2 opciones para verificar las entradas ordenadas:
1. –comprobar orden
2. –nocheck-order
El orden de verificación La opción verifica que la entrada esté ordenada correctamente antes de comparar. Si la entrada no está ordenada, obtendrá un error como se muestra a continuación:
# comm --check-order file1 file2 aa bb cc dd xx comm: file 2 is not in sorted order
Mientras que –nocheck-order La opción permite la comparación de archivos incluso si la entrada no está en el formato ordenado. Por ejemplo:
# cat file1 aa bb cc dd
# cat file2 xx cc yy zz
# comm --nocheck-order file1 file2 aa bb cc dd xx yy zz
Ejemplo 4:salida delimitada
comm también proporciona una opción para delimitar la salida utilizando el delimitador proporcionado por el usuario. Por ejemplo, en lugar de la salida predeterminada delimitada por "tabuladores", podemos usar un delimitador como "|" (tubería) como se muestra en el siguiente ejemplo:
# comm --output-delimiter="|" file1 file2 aa bb ||cc dd |xx |yy |zz
comm V/s diff
comunicación es similar a diff en que ambos comandos comparan dos archivos. Pero comm también se puede usar como uniq; comm selecciona líneas duplicadas o únicas entre dos archivos ordenados, mientras que uniq selecciona líneas duplicadas o únicas dentro del mismo archivo ordenado.