Opciones avanzadas de unión (join)
En tareas reales de procesamiento de datos, a menudo se necesitan operaciones de unión más avanzadas, como manejar datos no emparejados o seleccionar campos específicos. Este paso te introduce a estas opciones avanzadas del comando join
.
Vamos a crear dos archivos más complejos para nuestros ejemplos:
echo -e "1:2023-04-01:Thunderstorm\n2:2023-04-15:Hurricane\n3:2023-05-02:Tornado\n4:2023-05-10:Blizzard" > ~/project/storms_types.txt
echo -e "1:High\n2:Medium\n5:Low" > ~/project/severity.txt
Examinemos el contenido de estos archivos:
cat ~/project/storms_types.txt
Deberías ver:
1:2023-04-01:Thunderstorm
2:2023-04-15:Hurricane
3:2023-05-02:Tornado
4:2023-05-10:Blizzard
cat ~/project/severity.txt
Deberías ver:
1:High
2:Medium
5:Low
Observa que estos archivos no tienen una coincidencia perfecta de IDs:
severity.txt
tiene una entrada para el ID de tormenta 5, que no existe en storms_types.txt
storms_types.txt
tiene entradas para los IDs de tormenta 3 y 4, que no existen en severity.txt
Por defecto, join
solo muestra las líneas donde el campo de unión coincide en ambos archivos:
join -t: ~/project/storms_types.txt ~/project/severity.txt
Deberías ver:
1:2023-04-01:Thunderstorm:High
2:2023-04-15:Hurricane:Medium
Solo los IDs de tormenta 1 y 2 aparecen en la salida porque son los únicos que existen en ambos archivos.
Manejando líneas no emparejadas
Para incluir líneas no emparejadas en la salida, puedes usar la opción -a
:
join -t: -a 1 -a 2 ~/project/storms_types.txt ~/project/severity.txt
La opción -a 1
le dice a join
que incluya las líneas no emparejadas del primer archivo, y -a 2
hace lo mismo para el segundo archivo.
Deberías ver:
1:2023-04-01:Thunderstorm:High
2:2023-04-15:Hurricane:Medium
3:2023-05-02:Tornado:
4:2023-05-10:Blizzard:
5::Low
Observa cómo las líneas no emparejadas tienen campos vacíos donde estaría la información del otro archivo.
Seleccionando campos específicos
También puedes seleccionar campos específicos de cada archivo para incluir en la salida usando la opción -o
:
join -t: -o 1.1,1.3,2.2 ~/project/storms_types.txt ~/project/severity.txt
La opción -o 1.1,1.3,2.2
especifica qué campos se deben mostrar:
1.1
: Primer campo del primer archivo (ID de tormenta)
1.3
: Tercer campo del primer archivo (tipo de tormenta)
2.2
: Segundo campo del segundo archivo (severidad)
Deberías ver:
1:Thunderstorm:High
2:Hurricane:Medium
Esta salida incluye solo el ID de tormenta, el tipo de tormenta y el nivel de severidad, omitiendo la información de la fecha. Esto es especialmente útil cuando se trabaja con archivos que tienen muchos campos pero solo se necesitan algunos específicos en la salida.