Introducción
El comm
El comando es una sencilla utilidad de Linux para comparar archivos centrándose en el contenido común. El comando compara dos archivos ordenados línea por línea y muestra los resultados en tres columnas.
La siguiente guía explicará cómo usar Linux comm
comando con ejemplos.
Requisitos previos
- Un sistema que ejecuta Linux.
- Acceso a la terminal.
Sintaxis del comando comm
El comm
El comando se ejecuta con al menos dos argumentos que indican los nombres de los archivos que se compararán. Agregar opciones antes de los nombres de archivo personaliza la salida.
El comm
básico la sintaxis es:
comm [file_name_1] [file_name_2]
comm [options] [file_name_1] [file_name_2]
Sin embargo, al ejecutar comm
sin ninguna opción no proporciona resultados e imprime el siguiente resultado:
Opciones de comando de comunicación
Usando comm
es simple, pero agregar opciones proporciona personalización adicional.
La siguiente tabla incluye todos los comm
opciones:
Comando | Descripción |
---|---|
-1 | Imprime la salida sin la primera columna, ocultando las líneas exclusivas del primer archivo. |
-2 | Oculta la segunda columna en la salida (líneas exclusivas del segundo archivo). |
-3 | No imprime la columna que contiene las líneas comunes. |
--check-order | Comprueba si los archivos están ordenados. |
--nocheck-order | Imprime el resultado sin comprobar si los archivos están ordenados. |
--output-delimiter=[any character] | Reemplaza los espacios predeterminados en la salida con otro carácter. |
--total | Muestra el número total de líneas en cada columna. |
-z | Muestra las líneas de salida como terminadas en NULL en lugar de la salida predeterminada terminada en nueva línea. |
--help | Muestra información de ayuda. |
--version | Muestra información de la versión. |
Ejemplos de comunicación de Linux
El comm
El comando funciona con dos archivos ordenados. Para entender cómo comm
funciona, configure un entorno de prueba:
- Cree dos archivos de prueba.
- Nombre los archivos (por ejemplo, Archivo_1 y Archivo_2).
- Agregue diferentes palabras o números a cada archivo.
- Asegúrese de que parte del contenido se superponga.
Use el comando cat para mostrar el File_1 y Archivo_2 contenido. El resultado muestra que los archivos se superponen en tres palabras (art , perro y camino ):
Las siguientes secciones usan File_1 y Archivo_2 para explicar cómo comm
funciona.
Comparar dos archivos
Compara dos archivos ordenados línea por línea con:
comm File_1 File_2
El comando imprime los resultados en tres columnas:
- Columna 1 muestra solo valores exclusivos del primer archivo.
- Columna 2 imprime elementos presentes solo en el segundo archivo.
- Columna 3 muestra contenido común para ambos archivos:art , perro y camino .
Ocultar columnas
Usar argumentos -1
, -2
y -3
y las combinaciones para mostrar solo columnas particulares. Por ejemplo, imprima solo líneas comunes para ambos archivos con:
comm -12 File_1 File_2
Usando -12
con comm
oculta la primera y la segunda columna, dejando solo la que contiene líneas compartidas por ambos archivos.
Por otro lado, -3
oculta la columna tres y muestra líneas únicas para cada archivo:
comm -3 File_1 File_2
Ignorar caso
Comparación con comm
distingue entre mayúsculas y minúsculas. Todas las palabras en File_1 y Archivo_2 están en minúsculas, por lo que comm
reconoce el arte , perro y camino como común para ambos archivos.
Sin embargo, si, por ejemplo, la palabra arte está en mayúsculas en File_1 pero en minúsculas en File_2, la salida es:
Diferencias entre mayúsculas y minúsculas con la palabra arte /Arte entre dos archivos indica comm
para registrar la palabra como única para cada archivo. Mientras que comm
no acepta -i
como opción para ignorar mayúsculas y minúsculas, la opción tr proporciona una solución alternativa.
Usa Tr
en los dos archivos para convertir mayúsculas y luego redirigir la salida a archivos temporales (Temp_1 , Temp_2 ):
tr A-Z a-z <File_1 > Temp_1
tr A-Z a-z <File_2 > Temp_2
Tr
convierte el contenido de ambos archivos a minúsculas y crea nuevos archivos para guardar la salida (Temp_1 , Temp_2 ). Los archivos originales permanecen sin cambios.
Ejecute comm
en Temp_1 y Temp_2 para comparar archivos mientras se "ignora" mayúsculas y minúsculas:
comm Temp_1 Temp_2
El comando genera arte en minúsculas como palabra común para ambos archivos.
Comparar archivos sin clasificar
El comm
El comando solo produce una salida valiosa cuando los archivos ordenados se usan como argumentos. Cuando comm
funciona con archivos desordenados, la salida no se puede utilizar y siempre muestra un mensaje de error.
Por ejemplo, los dos archivos siguientes no están ordenados, como se muestra con cat
:
Cuando usas comm
en archivos sin clasificar, la salida imprime:
Mientras que comm
empareja ciertas líneas y produce una salida, la salida es incompleta e inutilizable. El mensaje de error especifica que ninguno de los archivos está ordenado.
Para verificar que los archivos no estén ordenados, use comm --check-order
:
comm --check-order Not_Sorted_File_1 Not_Sorted_File_2
El --check-order
La opción imprime el mensaje de error y detiene comm
de comparar archivos en el primer elemento sin clasificar.
Para forzar comm
para imprimir una salida y ocultar el mensaje de error, use --nocheck-order
:
comm --nocheck-order Not_Sorted_File_1 Not_Sorted_File_2
La salida no es fiable. Por ejemplo, la palabra arte está presente en las columnas uno y dos, aunque es común para ambos archivos.
La manera segura de usar comm
con archivos sin ordenar es aplicar la ordenación. Ejecute lo siguiente:
comm <(sort Not_Sorted_File_1 ) <(sort Not_Sorted_File_2)
El resultado muestra que las palabras arte , perro y camino son comunes para ambos archivos.
Tenga en cuenta que sort
sin argumentos solo afecta la salida estándar y no cambia los archivos fuente. Aún así, sort
se puede usar con otros comm
opciones
Por ejemplo, para imprimir solo palabras comunes para ambos archivos sin ordenar, use:
comm -12 <(sort Not_Sorted_File_1 ) <(sort Not_Sorted_File_2)
Para ordenar los archivos de origen y luego ejecutar comm
, utilice sort -o
. El -o
El argumento guarda la salida ordenada en un archivo específico.
Por ejemplo, ordene Not_Sorted_File_1 y guarde la salida en ese mismo archivo con:
sort -o Not_Sorted_File_1 Not_Sorted_File_1
Ejecutando cat
después de ordenar el archivo muestra que el archivo está ordenado ahora. Repita el mismo proceso para el segundo archivo:
sort -o Not_Sorted_File_2 Not_Sorted_File_2
Ejecute comm
para comparar archivos:
comm Not_Sorted_File_1 Not_Sorted_File_2
Comparar directorios
Usa comm
con ls para comparar nombres de archivo en dos directorios. Por ejemplo, compare Directorio1 y Directorio2 :
comm <(ls Directory1) <(ls Directory2)
La primera columna representa los nombres de archivo exclusivos de Directorio1 , el segundo aquellos exclusivos de Director y2 y el tercero representa nombres de archivo comunes para ambas carpetas.
Al ejecutar comm
con ls
, el comando solo mira los nombres de los archivos, no el contenido. Los archivos enumerados como comunes para ambas carpetas aún pueden diferir incluso si tienen el mismo nombre.
Usar comunicación con STDIN
Para comparar un archivo con una entrada de terminal estándar, use un guión como uno de los argumentos con comm
.
Por ejemplo, compare File_1 con la entrada estándar usando:
comm File_1 -
Escribe texto para comparar File_1 directamente a la terminal o use un editor de texto.
Después de pulsar Intro , el comando imprime la salida en tres columnas, utilizando STDIN en lugar de File_2.
La primera columna representa el contenido exclusivo de File_1 , el segundo muestra palabras encontradas solo en la entrada estándar y el tercero palabras comunes para ambos.
Cambiar el separador predeterminado
El comm
la salida separa las columnas con espacios de forma predeterminada. Para cambiar el separador, use el --output-delimiter
opción.
Por ejemplo, para usar *
en lugar de espacios, ejecuta:
comm --output-delimiter=* File_1 File_2
El resultado muestra que las palabras en File_1 no tienen asterisco, los de File_2 tienen un asterisco, y los elementos comunes para ambos archivos tienen dos asteriscos.
Mostrar recuentos de líneas
Muestra el número total de líneas en cada columna con el --total
opción:
comm --total File_1 File_2
La salida imprime el número de líneas en la parte inferior de cada columna.
Conclusión
Después de seguir los pasos de este tutorial, sabrá cómo comparar archivos línea por línea con el comm
dominio.
A continuación, aprenda una forma diferente de comparar archivos con el comando diff.