El comando comm en la familia Unix de sistemas operativos de computadora es una utilidad que se usa para comparar dos archivos para líneas comunes y distintas. comm se especifica en el estándar POSIX . Ha estado ampliamente disponible en sistemas operativos similares a Unix desde mediados hasta finales de la década de 1980.
Autor (es) original (es) | Lee E. McMahon |
---|---|
Desarrollador (es) | Laboratorios AT&T Bell , Richard Stallman , David MacKenzie |
Versión inicial | Noviembre de 1973 |
Sistema operativo | Unix , similar a Unix , Plan 9 , Inferno |
Plataforma | Multiplataforma |
Tipo | Mando |
Licencia | coreutils : GPLv3 + |
Historia
Escrito por Lee E. McMahon , comm apareció por primera vez en la versión 4 de Unix . [1]
La versión de comm incluido en GNU coreutils fue escrito por Richard Stallman y David MacKenzie. [2]
Uso
comm lee dos archivos como entrada, considerados como líneas de texto. comm genera un archivo, que contiene tres columnas. Las dos primeras columnas contienen líneas exclusivas del primer y segundo archivo, respectivamente. La última columna contiene líneas comunes a ambos. Esto es funcionalmente similar a diff .
Las columnas se distinguen típicamente con la
Para mayor eficiencia, las implementaciones estándar de comm espera que ambos archivos de entrada sean secuenciados en el mismo orden de intercalación de línea , ordenados léxicamente. El comando sort (Unix) se puede utilizar para este propósito.
La El algoritmo de comunicación hace uso de la secuencia de clasificación de la configuración regional actual . Si las líneas de los archivos no se clasifican de acuerdo con la configuración regional actual, el resultado es indefinido.
Código de retorno
a diferencia de diff , el código de retorno de comm no tiene un significado lógico con respecto a la relación de los dos archivos. Un código de retorno de 0 indica éxito, un código de retorno> 0 indica que ocurrió un error durante el procesamiento.
Ejemplo
$ gato foo manzana plátano berenjena $ barra de gato manzana plátano plátano calabacín $ comm foo bar manzana plátano plátano berenjena calabacín
Esto muestra que ambos archivos tienen un plátano, pero solo la barra tiene un segundo plátano.
Más detalladamente, el archivo de salida tiene la apariencia que se muestra a continuación. Tenga en cuenta que la columna se interpreta por el número de caracteres de tabulación iniciales. \ t representa un carácter de tabulación y \ n representa una nueva línea ( carácter de escape # Programación y formatos de datos ).
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | |
---|---|---|---|---|---|---|---|---|---|---|
0 | \ t | \ t | a | pag | pag | l | mi | \norte | ||
1 | \ t | \ t | B | a | norte | a | norte | a | \norte | |
2 | \ t | B | a | norte | a | norte | a | \norte | ||
3 | mi | gramo | gramo | pag | l | a | norte | t | \norte | |
4 | \ t | z | tu | C | C | h | I | norte | I | \norte |
Comparación con diff
En términos generales, diff es una utilidad más poderosa que com . El mas simple comm es más adecuado para su uso en scripts.
La principal distinción entre comm y diff es eso comm descarta información sobre el orden de las líneas antes de la clasificación.
Una pequeña diferencia entre comm y diff es eso comm no intentará indicar que una línea ha "cambiado" entre los dos archivos; las líneas se muestran en las columnas "del archivo n. ° 1", "del archivo n. ° 2" o "en ambas". Esto puede ser útil si se desea que dos líneas se consideren diferentes incluso si solo tienen diferencias sutiles.
Otras opciones
comm tiene opciones de línea de comandos para suprimir cualquiera de las tres columnas. Esto es útil para la creación de scripts.
También hay una opción para leer un archivo (pero no ambos) de la entrada estándar.
Limites
Se debe almacenar en búfer hasta una línea completa de cada archivo de entrada durante la comparación de líneas, antes de escribir la siguiente línea de salida.
Algunas implementaciones leen líneas con la función readlinebuffer () que no impone ningún límite de longitud de línea si la memoria del sistema es suficiente.
Otras implementaciones leen líneas con la función fgets () . Esta función requiere un búfer fijo. Para estas implementaciones, el tamaño del búfer a menudo se ajusta a lamacro POSIXLINE_MAX .
Ver también
- Comparación de herramientas de comparación de archivos
- Lista de comandos de Unix
- cmp (Unix) - comparación de archivos orientada a caracteres
- cut (Unix) : división de archivos orientados a columnas
Referencias
- ^ McIlroy, MD (1987). Un lector de investigación Unix: extractos comentados del Manual del programador, 1971–1986 (PDF) (Informe técnico). CSTR. Bell Labs. 139.
- ^ https://linux.die.net/man/1/comm
enlaces externos
- Especificación única de UNIX , Edición 7 de The Open Group : seleccione o rechace líneas comunes a dos archivos - Referencia de comandos y utilidades,
- Plan 9 , Volumen 1 - Manual del programador de
- Manual de comandos generales de Inferno -