Ir al contenido

join (Unix)

De Mexpedia

join es un comando presente en los sistemas operativos tipo Unix que combina las líneas de dos ficheros de texto plano si tienen el primer campo en común. Es similar a la sentencia JOIN usada en bases de datos relacionales pero opera en ficheros de texto.

Funcionamiento

[editar | editar código]

El comando join toma como entrada dos ficheros de texto y diferentes opciones. Si no se especifica ninguna opción, el comando busca un par de líneas en los dos ficheros que comienzan por el mismo campo (una secuencia de caracteres sin espacios) y muestra como salida una línea compuesta por el primer campo seguido del resto de las dos líneas.

Uno de los dos ficheros puede sustituirse por - para leer de la entrada estándar. Para que el emparejamiento funcione, ambos ficheros deben estar ordenados por el campo de unión siguiendo el mismo criterio de comparación que usa el propio comando, que depende de la configuración regional (variable LC_COLLATE); si quedan líneas que no pueden emparejarse, el programa muestra una advertencia.[1]

Los argumentos del programa especifican que carácter debe ser usado en lugar del espacio para separar los campos de una línea, que campo usar cuando busca líneas coincidentes y si devuelve o no las líneas que no coinciden.

La sintaxis general es join [opción]... fichero1 fichero2. POSIX define las opciones -1 y -2 (campo de unión de cada fichero), -t (carácter separador), -a y -v (tratamiento de las líneas sin pareja), -e (relleno de campos vacíos) y -o (formato de la salida).[2] GNU coreutils añade extensiones no estándar como -i / --ignore-case (comparar sin distinguir mayúsculas), --header (tratar la primera línea como cabecera) o --check-order; la antigua -j (campo común a ambos ficheros) es heredada y fue retirada de POSIX.[1]

Como ejemplo, los dos siguientes ficheros listan los nombres de los padres y madres de algunas personas. Nótese que ambos ficheros han sido ordenados (primero padre y luego madre) porque es un requisito del programa.

ejemplo1.txt

Jorge Sandra
Juan María

ejemplo2.txt

Alberto Marta
Jorge Sofía

El comando join ejemplo1.txt ejemplo2.txt produce la salida:

Jorge Sandra Sofía

Por lo tanto, solo "Jorge" es común en los dos ficheros como primera palabra de una línea.

El campo de unión tampoco tiene por qué ser texto; con dos ficheros ordenados por un identificador numérico:

empleados.txt

1 Ana
2 Luis
3 María

salarios.txt

1 30000
2 28000
3 35000

El comando join empleados.txt salarios.txt produce la salida:

1 Ana 30000
2 Luis 28000
3 María 35000

La utilidad join apareció en la versión 7 de AT&T Unix.[3] Está estandarizada por POSIX y la Single UNIX Specification.[2] La versión incluida en GNU coreutils fue escrita por Mike Haertel.[1] También está disponible para Microsoft Windows como parte de la colección UnxUtils.[4]

Véase también

[editar | editar código]

Referencias

[editar | editar código]
  1. ↑ 1,0 1,1 1,2 «join: Join lines on a common field». GNU Coreutils Manual. Consultado el 22 de junio de 2026. 
  2. ↑ 2,0 2,1 «join». The Open Group Base Specifications Issue 7. Consultado el 22 de junio de 2026. 
  3. ↑ «join(1)». OpenBSD manual pages. Consultado el 22 de junio de 2026. 
  4. ↑ «Native Win32 ports of some GNU utilities». unxutils.sourceforge.net. Archivado desde el original el 9 de febrero de 2006. Consultado el 22 de junio de 2026. 

Enlaces externos

[editar | editar código]