join y split
100%

Text-Fu · Lección 11

join y split

Aprende a unir dos archivos de texto ordenados mediante una clave y a dividir un archivo en fragmentos con nombre.

Las órdenes join y split resuelven problemas distintos de procesamiento de archivos. join combina registros relacionados de dos entradas de texto ordenadas, mientras que split divide una entrada en una secuencia de archivos más pequeños.

Unir dos archivos por su primer campo

De forma predeterminada, join compara el primer campo separado por espacios en blanco de exactamente dos archivos de entrada. Considera estos archivos ya ordenados:

people.txt:

1 John
2 Jane
3 Mary

surnames.txt:

1 Doe
2 Doe
3 Sue

Une los registros cuyos campos clave sean iguales:

$ join people.txt surnames.txt
1 John Doe
2 Jane Doe
3 Mary Sue

La salida contiene una vez la clave compartida, seguida de los campos restantes del primer y del segundo archivo. join procesa dos archivos a la vez; no acepta tres operandos de archivo normales como una unión relacional de tres vías.

Sin opciones de campo, ¿qué registros combina join first.txt second.txt?

Ordenar las claves de unión

Cada entrada debe estar ordenada por su campo de unión con reglas de comparación compatibles. Para el campo 1 predeterminado, prepara copias con sort -k 1,1:

$ LC_ALL=C sort -k 1,1 people-raw.txt > people.txt
$ LC_ALL=C sort -k 1,1 surnames-raw.txt > surnames.txt
$ LC_ALL=C join people.txt surnames.txt

Usar la misma configuración regional para ordenar y unir mantiene uniformes las reglas de intercalación. No redirijas una ordenación a la misma ruta de su entrada, porque el shell truncaría primero ese archivo.

¿Qué preparación suele requerir join para producir coincidencias fiables?

Seleccionar campos de unión diferentes

Usa -1 FIELD para la clave del primer archivo y -2 FIELD para la del segundo. Supón que la primera entrada contiene:

John 1
Jane 2
Mary 3

La segunda contiene:

1 Doe
2 Doe
3 Sue

Después de ordenar el primer archivo por el campo 2 y el segundo por el campo 1, ejecuta:

$ join -1 2 -2 1 people.txt surnames.txt
1 John Doe
2 Jane Doe
3 Mary Sue

Usa -t CHARACTER cuando un único carácter que no sea un espacio en blanco, como :, separe los campos. Opciones como -a 1 o -a 2 pueden incluir líneas sin pareja de una entrada; la salida predeterminada solo contiene claves coincidentes.

¿Qué opciones unen el campo 2 del primer archivo con el campo 1 del segundo?

Dividir por cantidad de líneas

split escribe porciones consecutivas de una entrada en archivos de salida separados. No es la operación inversa de una unión basada en claves.

$ split large.txt

El comportamiento predeterminado de GNU escribe hasta 1000 líneas por archivo de salida y usa el prefijo x, lo que produce nombres como xaa, xab y xac.

Usa -l NUMBER para elegir una cantidad de líneas y añade un último operando para elegir el prefijo de salida:

$ split -l 500 large.txt part-

Esto produce part-aa, part-ab y así sucesivamente, con un máximo de 500 líneas en cada fragmento.

¿Qué orden divide large.txt en fragmentos de un máximo de 500 líneas cuyos nombres comienzan por part-?

Dividir por tamaño

Usa -b SIZE para dividir la entrada por tamaño en bytes. En este contexto, los sufijos de GNU como K, M y G representan potencias de 1024:

$ split -b 10M archive.bin chunk-

Esto solicita fragmentos de 10 mebibytes, salvo un posible fragmento final más pequeño. split no crea un manifiesto del archivo ni metadatos de reconstrucción; conserva el orden de los sufijos y concatena los fragmentos en orden cuando corresponda reconstruirlo.

¿Qué orden divide archive.bin en fragmentos de 10 MiB con el prefijo chunk-?

Para practicar uniones mediante claves y el procesamiento de datos estructurados, prueba estos laboratorios prácticos:

  1. Orden join de Linux: unión de archivos - Este laboratorio ofrece una introducción práctica directa a join, para que practiques la combinación de líneas de dos archivos de texto ordenados mediante un campo común, tal como se explica en la lección.
  2. Procesamiento de datos de empleados - Aplica tus conocimientos de join y otras potentes utilidades de la línea de órdenes de Linux, como awk, para combinar y procesar datos de varias fuentes en un caso de análisis de datos realista.

Lección completada

Has completado join y split

Ahora puedes combinar registros ordenados o dividir una entrada en fragmentos ordenados.

  • Une exactamente dos archivos mediante campos clave iguales.

  • Ordena ambas entradas de forma coherente por sus claves de unión.

  • Selecciona campos clave no predeterminados con -1 y -2.

  • Divide por cantidad de líneas con -l.

  • Divide por tamaño en bytes con -b y un prefijo claro.

Guarda tu progreso

Crea una cuenta gratuita para guardar esta lección y continuar en cualquier dispositivo.

Crear una cuenta gratuita
Siguiente Lección
Volver a Text-Fu