Comando join de Linux: Unión de Archivos

LinuxBeginner
Practicar Ahora

Introducción

En esta sesión práctica, aprenderás a utilizar el comando join en Linux para fusionar datos provenientes de múltiples archivos. Simularemos un escenario en el que trabajas en el departamento de Recursos Humanos de una empresa y necesitas combinar información de empleados almacenada en diferentes bases de datos. Este ejercicio práctico demostrará la potencia y flexibilidad del comando join para tareas de procesamiento de datos.

Este es un Laboratorio Guiado, que proporciona instrucciones paso a paso para ayudarte a aprender y practicar. Sigue las instrucciones cuidadosamente para completar cada paso y obtener experiencia práctica. Los datos históricos muestran que este es un laboratorio de nivel principiante con una tasa de finalización del 98%. Ha recibido una tasa de valoraciones positivas del 99% por parte de los alumnos.

Comprensión de los Archivos de Datos

Comencemos examinando el contenido de nuestros archivos de datos de empleados. Tenemos dos archivos: employees.txt y salaries.txt.

Primero, cámbiate al directorio del proyecto:

cd /home/labex/project

Este comando cambia tu directorio de trabajo actual a /home/labex/project. Todas las operaciones posteriores se realizarán en este directorio.

Ahora, veamos el contenido de employees.txt:

cat employees.txt

El comando cat muestra el contenido del archivo. Deberías ver una salida similar a esta:

1001 John Engineering
1002 Sarah Marketing
1003 Mike Sales
1004 Emily HR
1005 David Finance

Cada línea representa a un empleado con su ID, nombre y departamento.

A continuación, echemos un vistazo a salaries.txt:

cat salaries.txt

La salida debería ser similar a:

1001 75000
1002 65000
1003 70000
1004 60000
1005 80000

Este archivo contiene los IDs de los empleados y sus salarios correspondientes.

Estos archivos representan bases de datos separadas que fusionaremos utilizando el comando join.

Operación Básica de Unión

Ahora que comprendemos nuestros datos, usemos el comando join para fusionar la información de ambos archivos basándonos en el ID del empleado.

Ejecuta el siguiente comando:

join employees.txt salaries.txt

Deberías ver una salida como esta:

1001 John Engineering 75000
1002 Sarah Marketing 65000
1003 Mike Sales 70000
1004 Emily HR 60000
1005 David Finance 80000

Analicemos qué ha sucedido:

  1. El comando join buscó el primer campo (ID de empleado) en ambos archivos.
  2. Cuando encontró IDs coincidentes, combinó las líneas de ambos archivos.
  3. La salida muestra el ID del empleado, seguido de todos los campos de employees.txt y luego todos los campos de salaries.txt (excepto el ID, que sería redundante).

Esto nos da una visión completa de la información de cada empleado en una sola línea. El comando join es particularmente útil cuando tienes datos divididos en varios archivos pero deseas visualizarlos o analizarlos en conjunto.

Personalización de la Salida de Join

A veces, es posible que deseemos cambiar el orden de los campos en nuestra salida o incluir solo campos específicos. Podemos hacer esto especificando los números de campo después del comando join.

Prueba este comando:

join -o 1.2,1.3,2.2,1.1 employees.txt salaries.txt

Deberías ver:

John Engineering 75000 1001
Sarah Marketing 65000 1002
Mike Sales 70000 1003
Emily HR 60000 1004
David Finance 80000 1005

Desglosemos la opción -o:

  • -o significa "formato de salida" (output format).
  • 1.2 representa el segundo campo del primer archivo (nombre).
  • 1.3 representa el tercer campo del primer archivo (departamento).
  • 2.2 representa el segundo campo del segundo archivo (salario).
  • 1.1 representa el primer campo del primer archivo (ID de empleado).

Esto nos permite personalizar el orden de la información en nuestro resultado. Es especialmente útil cuando necesitas reorganizar datos para un formato de informe específico o cuando solo requieres ciertos campos de cada archivo.

Manejo de Registros sin Coincidencia

En escenarios del mundo real, es posible que tengas registros en un archivo que no tengan coincidencias correspondientes en el otro. Vamos a simular esto agregando un nuevo empleado al que aún no se le ha asignado un salario.

Agrega este empleado a employees.txt:

echo "1006 Alex IT" >> employees.txt

El operador >> añade la nueva línea al final del archivo sin sobrescribir el contenido existente.

Ahora, si ejecutamos nuestro comando join básico:

join employees.txt salaries.txt

Notarás que Alex no aparece en la salida porque no hay un registro coincidente en salaries.txt.

Para incluir los registros que no tienen pareja, podemos usar la opción -a:

join -a 1 employees.txt salaries.txt

Ahora deberías ver a Alex en la salida:

1001 John Engineering 75000
1002 Sarah Marketing 65000
1003 Mike Sales 70000
1004 Emily HR 60000
1005 David Finance 80000
1006 Alex IT

La opción -a 1 le indica a join que incluya las líneas del primer archivo (employees.txt) que no se pudieron emparejar. Esto es útil cuando quieres ver todos los registros de un archivo, incluso si no tienen correspondencia en el otro.

Unión mediante un Campo Diferente

Hasta ahora, hemos estado uniendo nuestros archivos basándonos en el primer campo (ID de empleado). Pero, ¿qué pasa si queremos unir basándonos en un campo diferente? Esto puede ser útil cuando tus archivos están organizados de otra manera o cuando necesitas fusionar datos basándote en un atributo común que no sea un ID.

Vamos a crear un nuevo archivo llamado departments.txt con códigos de departamento:

cat << EOF > departments.txt
Engineering ENG
Marketing MKT
Sales SLS
HR HRS
Finance FIN
IT ITS
EOF

Este comando crea un nuevo archivo departments.txt con los nombres de los departamentos y sus códigos correspondientes.

Ahora, unamos esto con nuestro archivo employees.txt basándonos en el nombre del departamento:

join -1 3 -2 1 employees.txt departments.txt

Deberías ver:

Engineering 1001 John ENG
Marketing 1002 Sarah MKT
Sales 1003 Mike SLS
HR 1004 Emily HRS
Finance 1005 David FIN
IT 1006 Alex ITS

Analicemos el comando:

  • -1 3 le indica a join que use el tercer campo del primer archivo (employees.txt) como el campo de unión.
  • -2 1 le indica que use el primer campo del segundo archivo (departments.txt) como el campo de unión.

Esto nos permite unir archivos basándonos en cualquier campo común, no solo en el primero. Es particularmente útil cuando tus archivos tienen estructuras diferentes pero comparten cierta información clave.

Resumen

En este laboratorio, has aprendido a utilizar el comando join en Linux para fusionar datos de múltiples archivos. Hemos explorado varias funciones clave de join:

  • Unión básica de dos archivos basada en un campo común.
  • Personalización del orden de salida mediante la opción -o.
  • Inclusión de registros sin coincidencia con la opción -a.
  • Unión por campos distintos a la primera columna usando las opciones -1 y -2.

Otras opciones de join que no se trataron en este laboratorio incluyen:

  • -t CHAR: Utiliza CHAR como separador de campos de entrada y salida.
  • -i: Ignora las diferencias entre mayúsculas y minúsculas al comparar campos.
  • -e STRING: Reemplaza los campos de entrada faltantes con STRING.
  • -j FIELD: Equivalente a '-1 FIELD -2 FIELD'.
  • -v FILE_NUMBER: Similar a -a FILE_NUMBER, pero suprime las líneas de salida que sí se unieron (muestra solo las que no tienen pareja).

El comando join es una herramienta poderosa para el procesamiento de datos en Linux, permitiéndote combinar información de múltiples fuentes de manera eficiente. A medida que continúes trabajando con datos en tu entorno Linux, recuerda que join puede ser un recurso valioso para fusionar y analizar información de diferentes archivos.

Recursos