Introducción

Introducción

El comando unirse es otro ejemplo de utilidad de procesamiento de texto en GNU/Linux. El comando unir combina dos archivos basados ​​en las líneas de contenido coincidentes que se encuentran en cada archivo. El uso del comando unirse es bastante sencillo y si se usa actualmente y en la situación correcta puede ahorrar mucho tiempo y esfuerzo. Este artículo requiere una experiencia de línea de comandos muy básica.

Opciones de uso frecuente

  • -1 campo
    Únase en el campo especificado que se encuentra en el archivo 1
  • -2 campo
    Únase en el campo especificado que se encuentra en el archivo 2
  • -t char
    Use Char como separador de entrada y salida

Lo esencial

El uso básico del comando de unión es el uso sin ninguna opción. Todo lo que se requiere es especificar 2 archivos como argumentos. Digamos que tenemos dos archivos a.txt y b.txt con un siguiente contenido:

$ Cat A.TXT 1 A 2 B 3 C $ Cat B.TXT 1 John 2 Linda 3 raras 

Aquí podemos ver que el primer campo es un candidato perfecto para realizar una operación de unión en. Por defecto, el comando de unión realizará la operación de unión en un primer campo donde el separador de campo es un carácter o pestaña de espacio único. Por lo tanto, al ejecutar un siguiente comando de Linux, nuestros dos archivos se unen en función del campo 1:

$ Únete a un.txt b.TXT 1 A John 2 B Linda 3 C Rares 

Elegir el campo

En nuestro ejemplo anterior, puede ver una función predeterminada de un comando unión. En esta sección veremos cómo podemos especificar un campo diferente en el que el comando de unión debe realizar una operación de unión. Consideremos un seguimiento de un.txt y b.archivos txt:

$ Cat A.TXT John A 1 Linda B 2 Rares C 3 $ Cat B.TXT 1 A 2 B 3 C 

Como podemos ver, en este caso, el primer campo de unión predeterminado ya no coincide. Por lo tanto, la ejecución de un comando de unión en estos dos archivos no producirá ninguna salida. Sin embargo, también podemos ver que el segundo campo en el primer archivo coincida con el segundo campo en el segundo archivo. Como resultado, podemos modificar el comportamiento predeterminado del comando unión y unir ambos archivos según el segundo campo en cada archivo:

$ unir -1 2 -2 2 a.txt b.TXT A John 1 1 B Linda 2 2 C Rares 3 3 

donde -1 es un primer archivo y 2 es un segundo campo y -2 es un segundo archivo y 2 es una segunda columna. En este caso, solo porque ambos campos coincidentes son segundo, podemos usar -J como atajo.

$ unir -j 2 a.txt b.TXT A John 1 1 B Linda 2 2 C Rares 3 3 

Como ya ha notado que un tercer campo y el primer campo en ambos archivos también se pueden usar para una operación de unión.

$ unir -1 2 -2 2 a.txt b.TXT A John 1 1 B Linda 2 2 C Rares 3 3 $ unir -1 3 -2 1 a.txt b.TXT 1 John A A 2 Linda B B 3 Rares C C 

Es importante tener en cuenta desde el último a los ejemplos que el comando unión siempre imprimirá el campo de coincidencia como primero.

Elegir delimitador de campo

Bueno, no todos los archivos están bien formateados para una operación de comando de unión. Como se mencionó anteriormente, el delimitador de campo predeterminado es el espacio. Pero, ¿qué pasa si tenemos "", (coma) o incluso pestaña como delimitador?? Consideremos los siguientes archivos:

$ Cat A.TXT John, A, 1 Linda, B, 2 Rares, C, 3 $ Cat B.TXT 1, A 2, B 3, C 

En este caso, la única diferencia de los ejemplos anteriores es que el separador de campo es "",. Para decir el comando de unión qué separador de campo usar, podemos aprovechar la opción -t opción. La sintaxis es la misma:

$ Join -t, -1 3 -2 1 A.txt b.TXT 1, John, A, A 2, Linda, B, B 3, Rares, C, C 

Múltiples espacios

Si sus archivos tienen múltiples espacios como delimitador de campo, la opción más segura es convertirlos en un solo delimitador de espacio. Por ejemplo, unir estos archivos puede ser bastante difícil:

$ Cat A.TXT John A 1 Linda B 2 Rares C 3 $ Cat B.TXT 1 A 2 B 3 C 

Por lo tanto, si la situación le permite, puede convertirlo en un solo archivo delimitado de espacio usando el comando SED:

$ sed -i 's/\ s \+//g' a.TXT $ sed -i 's/\ s \+//g' b.TXT $ Cat A.txt b.TXT John A 1 Linda B 2 Rares C 3 1 A 2 B 3 C 

TAB A Delimitador de campo

Tab Delimiter también es aceptado por el comando unión como un valor predeterminado. Por lo tanto, el siguiente ejemplo realizará una operación de unión válida:

$ Cat A.txt b.TXT John A 1 Linda B 2 Rares C 3 1 A 2 B 3 C $ unir -1 3 -2 1 a.txt b.TXT 1 John A A 2 Linda B B 3 Rares C C 

Ignorando el caso

Si su campo coincidente está en un orden perfecto, pero los campos de ambos archivos tienen diferencias de casos superiores y minúsculos, la unión no realizará una operación de unión válida e ignorará líneas inigualables a menos que se use -I (ignore el caso). Tenga en cuenta el siguiente caso inferior B en el siguiente ejemplo:

$ Cat A.txt b.TXT John A 1 Linda B 2 Rares C 3 1 A 2 B 3 C $ unir -1 2 -2 2 a.txt b.TXT A John 1 1 C Rares 3 3 $ Join -i -1 2 -2 2 A.txt b.TXT A John 1 1 B Linda 2 2 C Rares 3 3 

Formato de unión predeterminado primario

En el siguiente ejemplo, veremos cómo podemos anular un comportamiento de formato de comando de unión predeterminado con la opción -o. Considere una salida de unión de los archivos a.txt y b.TXT:

$ Cat A.txt b.TXT John A 1 Linda B 2 Rares C 3 1 A 2 B 3 C $ unir -1 2 -2 2 a.txt b.TXT A John 1 1 B Linda 2 2 C Rares 3 3 

Unir el campo se imprime como primero. ¿Qué pasa si no queremos imprimir el campo de unión o qué pasa si queremos imprimir el campo unido en diferente orden?. En este caso, la opción de formato -o se vuelve muy útil. En este ejemplo imprimiremos solo campos coincidentes:

  • Primer campo en el primer archivo: 1.1
  • Primer campo en el segundo archivo: 2.1
$ unir -o 1.1 2.1 -1 2 -2 2 a.txt b.TXT John 1 Linda 2 Rares 3 

Líneas no pares

Por defecto, solo se imprimen las líneas pareables mediante el comando de unión. -Una opción instruye al comando de unión para incluir líneas inigualables. En el siguiente ejemplo, imprimiremos todas las líneas inigualables en el archivo 1.

$ Cat A.txt b.TXT John A 1 Linda B 2 Rares C 3 Lubos D 4 1 A 2 B 3 C 5 E $ unir -a 1 -o 1.1 2.1 -1 2 -2 2 a.txt b.TXT John 1 Linda 2 Rares 3 Lubos 

O imprimimos todas las líneas no pares de ambos archivos por:

$ unir -a 1 -a 2 -o 1.1 2.1 -1 2 -2 2 a.txt b.TXT John 1 Linda 2 Rares 3 Lubos 5 

Tutoriales de Linux relacionados:

  • Cosas para instalar en Ubuntu 20.04
  • Una introducción a la automatización, herramientas y técnicas de Linux
  • Mastering Bash Script Loops
  • Bucles anidados en guiones Bash
  • Manejo de la entrada del usuario en scripts bash
  • Comandos básicos de Linux
  • Comandos de Linux: los 20 comandos más importantes que necesitas ..
  • Cosas que hacer después de instalar Ubuntu 20.04 fossa focal Linux
  • Archivos de configuración de Linux: los 30 principales más importantes
  • Cómo montar la imagen ISO en Linux