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.
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.
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:
- 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. - Procesamiento de datos de empleados - Aplica tus conocimientos de
joiny otras potentes utilidades de la línea de órdenes de Linux, comoawk, 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
-1y-2.Divide por cantidad de líneas con
-l.Divide por tamaño en bytes con
-by un prefijo claro.
Guarda tu progreso
Crea una cuenta gratuita para guardar esta lección y continuar en cualquier dispositivo.
Crear una cuenta gratuita