Linux / Comando join: combinar archivos de texto por un campo común
join combina las filas con el mismo valor clave de dos archivos de texto en una sola fila. La diferencia con paste es que se une por el valor del campo, no por el número de fila.
De forma predeterminada, se utiliza el primer campo de cada archivo como clave y ambos archivos deben estar ordenados por esa clave. El comportamiento predeterminado es imprimir solo las filas que coinciden. Para verificar incluso las claves faltantes, consulte -a o -v.
Sintaxis básica
join [opciones] archivo1 archivo2
La implementación instalada y las opciones pueden variar según la distribución. Verifique la descripción de man join en el sistema actual.
Desde la preparación de datos hasta la ordenación, combinación y comparación de faltantes
El ejemplo requiere un shell compatible con la sintaxis mostrada y las utilidades GNU sort y join, además de mktemp. Ejecute todo el bloque: crea los datos en un directorio temporal nuevo y trabaja dentro de un subshell, indicado por los paréntesis. No sobrescribe los archivos del directorio de trabajo original y muestra la ubicación de la práctica al final. Después de revisar los resultados, elimine únicamente ese directorio de prueba si ya no necesita sus archivos.
(
set -eu
labdir=$(mktemp -d)
cd "$labdir"
printf 'b Bob
a Ana
c Cat
' > names.txt
printf 'a 7
b 12
' > scores.txt
LC_ALL=C sort -k1,1 names.txt > names.sorted
LC_ALL=C sort -k1,1 scores.txt > scores.sorted
LC_ALL=C join --check-order names.sorted scores.sorted
LC_ALL=C join --check-order -a 1 names.sorted scores.sorted
printf 'a:Ana
b:Bob
' > users.txt
printf 'a:reader
b:writer
' > roles.txt
LC_ALL=C sort -t ':' -k1,1 users.txt > users.sorted
LC_ALL=C sort -t ':' -k1,1 roles.txt > roles.sorted
LC_ALL=C join --check-order -t ':' users.sorted roles.sorted
printf 'Lab files: %s\n' "$labdir"
)
La primera combinación imprime a Ana 7 y b Bob 12, y el resultado de -a 1 también deja la c Cat que no tiene puntuación. Un ejemplo con dos puntos es a:Ana:reader y b:Bob:writer. La comparación de claves es de tipo cadena y se utilizó el mismo LC_ALL=C tanto en la ordenación como en la unión. Si hay claves duplicadas, pueden aparecer todas las combinaciones correspondientes de filas, por lo que no se asume una combinación uno a uno. La salida de --check-order que falla no se utiliza como resultado final normal.
Opciones y formatos principales
| Opción o formato | Descripción |
|---|---|
-t carácter |
Especifica el carácter separador de campos de entrada y salida. |
-1 N / -2 N |
Especifica los campos clave de unión del primer y segundo archivo. |
-a 1 o -a 2 |
También imprime filas que no coinciden en el archivo especificado. |
-v 1 o -v 2 |
Imprime solo las filas que no coinciden en el archivo especificado. |
-o formato |
Se especifican los campos de salida y el orden. |
Precauciones al usar
Ambos archivos deben ordenarse según la misma clave, delimitador y configuración regional. Las entradas que no estén ordenadas pueden perderse o combinarse incorrectamente. Si hay claves duplicadas, una sola clave puede generar varias filas de salida, por lo que se debe verificar el número de resultados.
Preguntas frecuentes
¿Se puede unir un archivo que no esté ordenado?
Las operaciones de unión comunes requieren que ambos archivos estén ordenados según el campo de unión. Cree una copia con el mismo orden de clasificación y configuración regional antes de ejecutar.
Documentación oficial
Se puede consultar el comportamiento exacto de las opciones y las diferencias entre implementaciones en la documentación oficial sobre join.




