17/04/2005
En el vasto universo de la terminología informática y del gaming, a menudo nos topamos con abreviaturas y acrónimos que pueden tener múltiples significados. Uno de ellos es "Comm". Si bien en el contexto de los videojuegos podría referirse a "Comunidad" (Community) o "Comunicaciones" (Communications), existe una herramienta fundamental en entornos basados en Unix y Linux que lleva este nombre: el comando comm. Lejos de ser una simple abreviatura, es una utilidad de línea de comandos increíblemente potente y específica, diseñada para una tarea crucial: comparar archivos de texto de una manera única y estructurada.

Este artículo se sumerge en las profundidades del comando comm. Exploraremos qué es exactamente, cómo funciona su magia, su sintaxis, sus opciones más útiles y en qué escenarios se convierte en el héroe que no sabías que necesitabas. Si eres un desarrollador, un administrador de sistemas o simplemente un entusiasta de Linux que busca ampliar su arsenal de herramientas, has llegado al lugar correcto.
¿Qué es y para qué sirve el comando Comm?
El comando comm es una utilidad estándar en los sistemas operativos tipo Unix, como Linux y macOS. Su función principal es comparar dos archivos de texto que ya están previamente ordenados lexicográficamente (es decir, alfabéticamente). A diferencia de otros comandos como diff, que muestra las diferencias en un formato de "parche", comm presenta su salida en un formato de tres columnas, limpio y fácil de interpretar.
La salida se estructura de la siguiente manera:
- Columna 1: Muestra las líneas que son únicas del primer archivo (ARCHIVO1).
- Columna 2: Muestra las líneas que son únicas del segundo archivo (ARCHIVO2).
- Columna 3: Muestra las líneas que son comunes a ambos archivos.
Esta estructura lo hace ideal para tareas como comparar listas de usuarios, inventarios, configuraciones, listas de mods de un juego, o cualquier conjunto de datos basado en líneas donde necesites ver rápidamente qué elementos se han añadido, eliminado o permanecen iguales entre dos versiones.
El Requisito de Oro: Los Archivos Deben Estar Ordenados
Hay una regla fundamental para que comm funcione correctamente: ambos archivos que se van a comparar deben estar ordenados. Si los archivos no están ordenados, el comando puede producir resultados incorrectos o mostrar un mensaje de error. Esto se debe a que el algoritmo del comando avanza a través de ambos archivos simultáneamente y asume un orden para realizar la comparación de manera eficiente. ¡No te preocupes! Si tus archivos no están ordenados, es muy fácil solucionarlo usando el comando sort, como veremos en los ejemplos prácticos.
Sintaxis y Opciones Principales
La sintaxis básica del comando es muy sencilla:
comm [OPCIÓN]... ARCHIVO1 ARCHIVO2
Aunque su uso básico es directo, el verdadero poder de comm reside en sus opciones, que nos permiten filtrar la salida para ver solo la información que nos interesa.
Las Opciones de Supresión
Las opciones más utilizadas son las que suprimen una o más columnas de la salida. Estas son increíblemente útiles para aislar la información que buscas.

-1: Suprime la columna 1 (líneas únicas de ARCHIVO1).-2: Suprime la columna 2 (líneas únicas de ARCHIVO2).-3: Suprime la columna 3 (líneas comunes a ambos archivos).
Puedes combinar estas opciones. Por ejemplo, si solo quieres ver las líneas que ambos archivos tienen en común, usarías comm -12 ARCHIVO1 ARCHIVO2. Si, por el contrario, solo te interesan las diferencias totales, podrías usar comm -3 ARCHIVO1 ARCHIVO2 para ver las líneas únicas de ambos archivos.
Ejemplo Práctico: Comparando Listas de Mods
Imaginemos que somos administradores de un servidor de Minecraft o de cualquier otro juego que use mods. Tenemos dos listas de mods: la del mes pasado y la actual. Queremos ver qué mods se han añadido, cuáles se han quitado y cuáles siguen activos.
Primero, creamos nuestros dos archivos, `mods_pasado.txt` y `mods_actual.txt`.
Contenido de mods_pasado.txt:
OptiFine JourneyMap IronChest BiomesOPlenty JEIContenido de mods_actual.txt:
OptiFine IronChest JEI Waystones XaerosMinimapComo puedes ver, los archivos no están ordenados alfabéticamente. Si intentamos ejecutar comm directamente, obtendremos un resultado erróneo o una advertencia. La solución es usar la "sustitución de procesos" en la terminal, que nos permite tratar la salida de un comando como si fuera un archivo. De esta forma, ordenamos los archivos al vuelo antes de pasárselos a comm.
$ comm <(sort mods_pasado.txt) <(sort mods_actual.txt)
La salida sería algo así (los espacios al inicio indican la columna):
BiomesOPlenty JourneyMap IronChest JEI OptiFine Waystones XaerosMinimapAnalicemos esta salida:
- Líneas sin sangría (Columna 1): `BiomesOPlenty` y `JourneyMap` son mods que estaban en la lista pasada pero no en la actual (se quitaron).
- Líneas con una sangría (Columna 2): `Waystones` y `XaerosMinimap` son mods que están en la lista actual pero no en la pasada (se añadieron).
- Líneas con doble sangría (Columna 3): `IronChest`, `JEI` y `OptiFine` son mods que están en ambas listas.
Filtrando los Resultados
Ahora, usemos las opciones para obtener información específica:
Para ver solo los mods nuevos (añadidos):
$ comm -13 <(sort mods_pasado.txt) <(sort mods_actual.txt)
Salida:
Waystones XaerosMinimapPara ver solo los mods que se quitaron:
$ comm -23 <(sort mods_pasado.txt) <(sort mods_actual.txt)
Salida:
BiomesOPlenty JourneyMapPara ver solo los mods que no han cambiado:
$ comm -12 <(sort mods_pasado.txt) <(sort mods_actual.txt)
Salida:
IronChest JEI OptiFineComm vs. Diff vs. Cmp: Eligiendo la Herramienta Correcta
En el mundo de la comparación de archivos en Linux, comm no está solo. Sus compañeros más conocidos son diff y cmp. Es crucial entender sus diferencias para saber cuándo usar cada uno.
Tabla Comparativa de Utilidades
| Característica | comm | diff | cmp |
|---|---|---|---|
| Propósito Principal | Comparar líneas en archivos ordenados. | Encontrar diferencias detalladas y generar un "parche". | Comparar archivos byte por byte. |
| Formato de Salida | Tres columnas (únicas de F1, únicas de F2, comunes). | Muestra las líneas que han cambiado, añadido o eliminado. | Informa la ubicación del primer byte y línea diferente. |
| Requisito Clave | Los archivos de entrada deben estar ordenados. | No requiere ordenamiento. | No requiere ordenamiento. |
| Caso de Uso Ideal | Comparar listas, inventarios o directorios. | Revisar cambios en código fuente o archivos de configuración. | Verificar si dos archivos (especialmente binarios) son idénticos. |
Preguntas Frecuentes (FAQ)
- ¿Qué pasa si mis archivos no están ordenados y no uso `sort`?
commintentará procesarlos, pero la salida será, con toda probabilidad, incorrecta. Puede que no muestre todas las líneas comunes o únicas correctamente. Algunos sistemas también emitirán una advertencia como `comm: file 1 is not in sorted order`.- ¿Puedo comparar archivos ignorando mayúsculas y minúsculas?
- ¡Sí! El truco no está en
comm, sino en cómo los ordenas. Puedes usar la opción-f(fold case) del comandosort. El comando completo sería:comm <(sort -f archivo1.txt) <(sort -f archivo2.txt). - ¿Es `comm` mejor que `diff`?
- No es una cuestión de "mejor", sino de "más adecuado para la tarea". Si necesitas ver los cambios detallados en un documento o script para entender la evolución, `diff` es tu herramienta. Si tienes dos listas y solo necesitas saber qué elementos están en una, en la otra, o en ambas, `comm` es mucho más rápido y su salida es más limpia para ese propósito.
- ¿Hay otras opciones útiles en `comm`?
- Sí, aunque menos comunes. Por ejemplo,
--totalimprimirá al final un resumen con el número de líneas en cada columna. La opción--output-delimiter=STRINGte permite cambiar el carácter de separación entre columnas, lo que puede ser útil para procesar la salida con otros scripts.
Conclusión
El comando comm es un ejemplo perfecto de la filosofía de diseño de Unix: una herramienta que hace una cosa, y la hace excepcionalmente bien. Aunque su requisito de tener archivos ordenados puede parecer una limitación, en realidad lo convierte en un especialista altamente eficiente para comparar listas. La próxima vez que necesites cruzar datos entre dos archivos de texto, ya sea para gestionar mods, revisar listas de usuarios o comparar logs, recuerda el poder y la simplicidad de comm. Con un poco de práctica y combinándolo con el comando sort, se convertirá en una pieza indispensable de tu caja de herramientas digital.
Si quieres conocer otros artículos parecidos a Comando Comm: Compara Archivos como un Profesional puedes visitar la categoría Guías.
