Cómo usar el comando de unión en Linux
Fatmawati Achmad Zaenuri / Shutterstock
Si desea fusionar datos de dos archivos de texto haciendo coincidir un campo común, puede usar Linux join
mando. Agrega una pizca de dinamismo a sus archivos de datos estáticos. Le mostraremos cómo usarlo.
Coincidencia de datos entre archivos
Los datos son el rey. Corporaciones, negocios y hogares lo manejan. Pero los datos almacenados en diferentes archivos y recopilados por diferentes personas son una molestia. Además de saber qué archivos abrir para encontrar la información que desea, es probable que el diseño y el formato de los archivos sean diferentes.
También debe lidiar con el dolor de cabeza administrativo de qué archivos deben actualizarse, cuáles deben respaldarse, cuáles son heredados y cuáles pueden archivarse.
Además, si necesita consolidar sus datos o realizar algún análisis en un conjunto de datos completo, tiene un problema adicional. ¿Cómo racionaliza los datos en los diferentes archivos antes de poder hacer lo que necesita hacer con ellos? ¿Cómo aborda la fase de preparación de datos?
La buena noticia es que si los archivos comparten al menos un elemento de datos común, Linux join
El comando puede sacarte del fango.
Los archivos de datos
Todos los datos que usaremos para demostrar el uso de join
El comando es ficticio, comenzando con los siguientes dos archivos:
El siguiente es el contenido de file-1.txt
:
Tenemos un conjunto de líneas numeradas y cada línea contiene toda la siguiente información:
- & rsaquo; Cyber Monday 2021: las mejores ofertas tecnológicas
- & rsaquo; Cyber Monday 2021: las mejores ofertas de Apple
- & rsaquo; Funciones frente a fórmulas en Microsoft Excel: ¿Cuál es la diferencia?
- & rsaquo; 5 sitios web que todo usuario de Linux debería marcar
- & rsaquo; Cómo encontrar su Spotify Wrapped 2021
- & rsaquo; The Computer Folder Is 40: Cómo Xerox Star creó el escritorio
El siguiente es el contenido de file-2.txt
:
Cada línea en file-2.txt
contiene la siguiente información:
El join
El comando funciona con campos, lo que, en este contexto, significa una sección de texto rodeada por espacios en blanco, el comienzo de una línea o el final de una línea. Para join
para hacer coincidir las líneas entre los dos archivos, cada línea debe contener un campo común.
Por lo tanto, solo podemos hacer coincidir un campo si aparece en ambos archivos. La dirección IP solo aparece en un archivo, por lo que no es bueno. El primer nombre solo aparece en un archivo, por lo que tampoco podemos usarlo. El apellido está en ambos archivos, pero sería una mala elección, ya que diferentes personas tienen el mismo apellido.
Tampoco puede vincular los datos con las entradas masculinas y femeninas porque son demasiado vagas. Las regiones de Nueva York y los valores en dólares solo aparecen en un archivo también.
Sin embargo, podemos usar la dirección de correo electrónico porque está presente en ambos archivos y cada uno es exclusivo de una persona. Un vistazo rápido a los archivos también confirma que las líneas en cada uno corresponden a la misma persona, por lo que podemos usar los números de línea como nuestro campo para hacer coincidir (usaremos un campo diferente más adelante).
Anuncio publicitarioTenga en cuenta que hay un número diferente de campos en los dos archivos, lo cual está bien, podemos decir join
qué campo usar de cada archivo.
Sin embargo, tenga cuidado con campos como las regiones de Nueva York; en un archivo separado por espacios, cada palabra en el nombre de una región parece un campo. Debido a que algunas regiones tienen nombres de dos o tres palabras, en realidad tiene una cantidad diferente de campos dentro del mismo archivo. Esto está bien, siempre que coincida en los campos que aparecen en la línea antes de las regiones de Nueva York.
El comando de unión
Primero, el campo que va a hacer coincidir debe estar ordenado. Tenemos números ascendentes en ambos archivos, por lo que cumplimos con ese criterio. Por defecto, join
usa el primer campo de un archivo, que es lo que queremos. Otro valor predeterminado sensato es que join
espera que los separadores de campo sean espacios en blanco. Una vez más, lo tenemos, así que podemos seguir adelante y encender join
.
Como usamos todos los valores predeterminados, nuestro comando es simple:
|_+_|
join
considera que los archivos son el archivo uno y el archivo dos según el orden en el que aparecen en la línea de comando.
El resultado es el siguiente:
|_+_|La salida se formatea de la siguiente manera: El campo en el que se hicieron coincidir las líneas se imprime primero, seguido de los otros campos del archivo uno, y luego los campos del archivo dos sin el campo de coincidencia.
Campos sin clasificar
Intentemos algo que sabemos que no funcionará. Pondremos las líneas en un archivo desordenadas, así que join
no podrá procesar el archivo correctamente. El contenido de file-3.txt
son lo mismo que file-2.txt
, pero la línea ocho está entre las líneas cinco y seis.
El siguiente es el contenido de file-3.txt
:
Escribimos el siguiente comando para intentar unir file-3.txt
a file-1.txt
:
join
informa que la séptima línea en file-3.txt
está fuera de servicio, por lo que no se procesa. La línea siete es la que comienza con el número seis, que debe ir antes del ocho en una lista ordenada correctamente. La sexta línea del archivo (que comienza con 8 Odell) fue la última procesada, por lo que vemos el resultado.
Puede utilizar el --check-order
opción si desea ver si join
está satisfecho con el orden de clasificación de los archivos; no se intentará combinarlos.
Para hacerlo, escribimos lo siguiente:
|_+_|
join
le informa de antemano que habrá un problema con la línea siete del archivo file-3.txt
.
Archivos con líneas faltantes
En file-4.txt
, se eliminó la última línea, por lo que no hay una línea ocho. Los contenidos son los siguientes:
Escribimos lo siguiente y, sorprendentemente, join
no se queja y procesa todas las líneas que puede:
La salida enumera siete líneas fusionadas.
El -a
La opción (imprimir no emparejable) dice join
para imprimir también las líneas que no pudieron coincidir.
Aquí, escribimos el siguiente comando para decirle a join
para imprimir las líneas del archivo uno que no pueden coincidir con las líneas del archivo dos:
Siete líneas coinciden y la línea ocho del archivo uno está impresa, sin coincidencia. No hay información combinada porque file-4.txt
no contenía una línea ocho con la que pudiera coincidir. Sin embargo, al menos sigue apareciendo en la salida para que sepa que no tiene una coincidencia en file-4.txt
.
Escribimos lo siguiente -v
(suprimir líneas unidas) para revelar las líneas que no coinciden:
Vemos que la línea ocho es la única que no tiene una coincidencia en el archivo dos.
Coincidencia de otros campos
Hagamos coincidir dos archivos nuevos en un campo que no es el predeterminado (campo uno). El siguiente es el contenido de file-7.txt:
|_+_|Y el siguiente es el contenido de file-8.txt:
|_+_|Anuncio publicitarioEl único campo sensato que se puede usar para unirse es la dirección de correo electrónico, que es el campo uno en el primer archivo y el campo dos en el segundo. Para acomodar esto, podemos usar el -1
(archivar un campo) y -2
(archivo de dos campos) opciones. Seguiremos estos con un número que indica qué campo de cada archivo debe usarse para unirse.
Escribimos lo siguiente para decirle join
para usar el primer campo en el archivo uno y el segundo en el archivo dos:
Los archivos se unen en la dirección de correo electrónico, que se muestra como el primer campo de cada línea en la salida.
Usando diferentes separadores de campo
¿Qué sucede si tiene archivos con campos que están separados por algo que no sea un espacio en blanco?
Los dos archivos siguientes están delimitados por comas; el único espacio en blanco está entre los nombres de lugares de varias palabras:
|_+_| |_+_|Anuncio publicitario
Podemos usar el -t
(carácter separador) para decirle a join
qué carácter utilizar como separador de campo. En este caso, es la coma, por lo que escribimos el siguiente comando:
Todas las líneas coinciden y los espacios se conservan en los nombres de los lugares.
Ignorar mayúsculas y minúsculas
Otro archivo, file-9.txt
, es casi idéntico a file-8.txt
. La única diferencia es que algunas de las direcciones de correo electrónico tienen una letra mayúscula, como se muestra a continuación:
Cuando nos unimos file-7.txt
y file-8.txt
, funcionó perfectamente. Veamos qué sucede con file-7.txt
y file-9.txt
.
Escribimos el siguiente comando:
|_+_|
Solo emparejamos seis líneas. Las diferencias en letras mayúsculas y minúsculas impidieron que se unieran las otras dos direcciones de correo electrónico.
Anuncio publicitarioSin embargo, podemos usar el -i
(ignorar mayúsculas y minúsculas) para forzar join
para ignorar esas diferencias y hacer coincidir los campos que contienen el mismo texto, independientemente del caso.
Escribimos el siguiente comando:
|_+_|
Las ocho líneas se combinan y unen correctamente.
Mezclar y combinar
En join
, tienes un aliado poderoso cuando estás luchando con una preparación de datos incómoda. Tal vez necesite analizar los datos, o tal vez esté tratando de darles forma para realizar una importación a un sistema diferente.
No importa cuál sea la situación, se alegrará de tener join
en tu esquina!
RELACIONADO: Las mejores computadoras portátiles Linux para desarrolladores y entusiastas
LEER SIGUIENTEDave McKay usó computadoras por primera vez cuando la cinta de papel perforada estaba de moda, y ha estado programando desde entonces. Después de más de 30 años en la industria de las tecnologías de la información, ahora es un periodista de tecnología a tiempo completo. Durante su carrera, ha trabajado como programador autónomo, gerente de un equipo de desarrollo de software internacional, gerente de proyectos de servicios de TI y, más recientemente, como oficial de protección de datos. Su escrito ha sido publicado por howtogeek.com, cloudsavvyit.com, itenterpriser.com y opensource.com. Dave es un evangelista de Linux y un defensor del código abierto.
Leer biografía completa