Articulo de referencia

comunicación

comm command"},"author":{"wt":"[[Lee E. McMahon]]"},"developer":{"wt":"[[AT&T Bell Laboratories]], [[Richard Stallman]], David MacKenzie"},"released":{"wt":"{{Start date and age...

commes un comando de shell para comparar dos archivos en busca de líneas comunes y distintas. Lee los archivos como líneas de texto y genera un texto en tres columnas. Las dos primeras columnas contienen las líneas exclusivas del primer y segundo archivo, respectivamente. La última columna contiene las líneas comunes a ambos. Las columnas suelen estar separadas por el carácter de tabulación (<tab) . Si el texto de entrada contiene líneas que comienzan con este carácter, las columnas de salida pueden resultar ambiguas.

Para mayor eficiencia, las implementaciones estándar commesperan que ambos archivos de entrada estén ordenados según el mismo orden de intercalaciónsort de líneas, ordenados léxicamente. El comando puede utilizarse para este fin. El commalgoritmo utiliza la secuencia de intercalación de la configuración regional actual . Si las líneas de los archivos no están intercaladas según la configuración regional actual, el resultado es indefinido.

El comando está especificado en el estándar POSIX . Ha estado ampliamente disponible en sistemas operativos tipo Unix desde mediados o finales de la década de 1980. Implementado originalmente por Lee E. McMahon , el comando apareció por primera vez en la versión 4 de Unix . [ 1 ] La versión en GNU coreutils fue escrita por Richard Stallman y David MacKenzie. [ 2 ]

Ejemplo

$ gato foo manzana plátano berenjena $ gato bar manzana plátano plátano calabacín $ comm foo bar  manzana  plátano  plátano berenjena  calabacín

Esto demuestra que ambos archivos tienen un plátano, pero solo el archivo bar tiene un segundo plátano.

En detalle, el archivo de salida tiene la siguiente apariencia. Tenga en cuenta que la columna se interpreta según el número de caracteres de tabulación iniciales. \t representa un carácter de tabulación y \n representa un salto de línea ( Carácter de escape#Programación y formatos de datos ).

Límites

Durante la comparación de líneas, antes de escribir la siguiente línea de salida, se debe almacenar en búfer hasta una línea completa de cada archivo de entrada.

Algunas implementaciones leen las líneas con una 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 suele ajustarse según la macro POSIXLINE_MAX .

Comparación con diferentes

Aunque también es un comando de comparación de archivos, diffinforma información significativamente diferente a comm. En general, diffes más potente que comm. El más simple commes el más adecuado para su uso en scripts.

La principal diferencia entre commy diffes que commdescarta la información sobre el orden de las líneas antes de la clasificación.

Una pequeña diferencia entre commy diffes que commno 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 ambos". Esto puede ser útil si se desea que dos líneas se consideren diferentes incluso si solo presentan diferencias sutiles.

A diferencia de otros casos diff, el código de salida de este programa commno indica si los archivos coinciden. Como es habitual, 0 indica éxito y otros valores positivos indican un error.

Véase también

Referencias

  1. McIlroy, MD (1987). Un lector de Research Unix: extractos anotados del Manual del programador, 1971–1986 (PDF) (Informe técnico). CSTR. Bell Labs. 139.
  2. "Comm(1): Comparar dos archivos ordenados línea por línea - Página man de Linux" . Archivado del original el 26/01/2019 . Consultado el 26/01/2019 .