A veces, es posible que desee combinar dos archivos de manera que la salida tenga aún más sentido. Por ejemplo, podría haber un archivo que contenga el nombre de los continentes, y otro archivo que contenga los nombres de los países ubicados en estos continentes, y el requisito es combinar ambos archivos de manera que un continente y el país correspondiente aparezcan en la misma línea.
Ese es solo un ejemplo:podría haber cientos de tales casos de uso. Si está en Linux y está buscando una herramienta que pueda ayudarlo en situaciones similares a estas, puede consultar unirse , que es una utilidad de línea de comandos. En este tutorial, discutiremos este comando usando algunos ejemplos fáciles de entender.
Tenga en cuenta que todos los ejemplos mencionados en este artículo se han probado en Ubuntu 16.04 y la versión del comando de unión que hemos usado es la 8.25.
Comando de unión de Linux
El comando unir le permite combinar líneas de dos archivos en un campo común.
join [OPTION]... FILE1 FILE2
Esto es lo que dice la página de manual sobre esta herramienta:
For each pair of input lines with identical join fields, write a line to standard output. The default
join field is the first, delimited by blanks. When FILE1 or FILE2 (not both) is -, read standard input.
Los siguientes ejemplos le darán una buena idea de cómo funciona el comando de unión.
1. ¿Cómo combinar líneas de archivos usando el comando de unión?
Comprendamos el uso básico del comando unirse. Supongamos que hay dos archivos (archivo1 y archivo2) que contienen las siguientes líneas:
1. Asia:
2. Africa:
3. Europe:
4. North America:
y
1. India
2. Nigeria
3. The Netherlands
4. The US
Ahora, puedes combinar estos dos archivos de la siguiente manera:
join file1 file2
Aquí está el resultado del comando anterior en nuestro caso:
2. ¿Cómo hacer que join imprima líneas no emparejables?
De forma predeterminada, el comando de unión solo imprime líneas emparejables. Por ejemplo, incluso si el archivo 1 contiene un campo adicional (línea número 5):
1. Asia:
2. Africa:
3. Europe:
4. North America:
5. South America:
unir archivo1 y archivo2 no producirá ningún resultado diferente:
Esto se debe a que las líneas que no se pueden emparejar se omiten en la salida. Sin embargo, si lo desea, aún puede tenerlos en la salida usando -a opción de línea de comando. Esta opción requiere que pase un número de archivo para que la herramienta sepa de qué archivo está hablando.
Por ejemplo, en nuestro caso, el comando sería:
join file1 file2 -a 1
Entonces puede ver que la línea no emparejada del archivo número 1 (archivo 1 en nuestro caso) también se mostró en la salida.
Tenga en cuenta que en caso de que solo desee imprimir líneas no emparejadas (es decir, suprimir las líneas emparejadas en la salida), puede hacerlo usando -v opción de línea de comando. Esta opción funciona exactamente como funciona -a.
Aquí hay un ejemplo de la opción -v:
3. ¿Cómo proporcionar campos de combinación personalizados?
Como ya sabemos, join combina líneas de archivos en un campo común, que es el primer campo por defecto. Sin embargo, si lo desea, puede especificar un campo diferente para cada archivo. Por ejemplo, considere los siguientes contenidos en archivo1 y archivo2, respectivamente.
* 1. Asia:
& 2. Africa:
@ 3. Europe:
# 4. North America:
# 1. India
@ 2. Nigeria
& 3. The Netherlands
* 4. The US
Ahora, si desea que el segundo campo de cada línea sea el campo común para unirse, puede decírselo a la herramienta usando el -1 y -2 opciones de la línea de comandos. Mientras que el primero representa el primer archivo, el segundo se refiere al segundo archivo. Estas opciones requieren un argumento numérico que se refiera al campo de unión para el archivo correspondiente.
Por ejemplo, en nuestro caso, el comando será:
join -1 2 -2 2 file1 file2
Y aquí está el resultado de este comando:
Tenga en cuenta que en caso de que la posición del campo común sea la misma en ambos archivos (como en el ejemplo que acabamos de discutir, donde es 2), puede reemplazar la parte - 1 [campo] -2 [campo] en el comando con -j [campo] . Entonces, en nuestro caso, el comando se convertiría en:
unir -j2 archivo1 archivo2
4. ¿Cómo hacer que la operación de combinación no distinga entre mayúsculas y minúsculas?
De forma predeterminada, la operación del comando de unión distingue entre mayúsculas y minúsculas. Por ejemplo, considere los siguientes archivos:
archivo1
A. Asia:
B. Africa:
C. Europe:
D. North America:
archivo2
a. India
b. Nigeria
c. The Netherlands
d. The US
Ahora, si intenta unir estos dos archivos, usando el (primer) campo común predeterminado, no pasará nada. Esto se debe a que el caso de los elementos de campo en ambos archivos es diferente. Para hacer que join ignore este caso, use -i opción de línea de comando.
Aquí está el comando para nuestro caso:
join -i file1 file2
Y la siguiente captura de pantalla muestra el comando en acción:
5. ¿Cómo hacer que la unión no verifique la entrada ordenada?
De forma predeterminada, el comando de unión comprueba si la entrada suministrada está ordenada o no, e informa si no lo está. Por ejemplo, considere el siguiente resultado cuando la información en el archivo 1 no se clasificó:
Ahora, en caso de que desee que este error/advertencia desaparezca, puede hacerlo usando el --nocheck-order opción. Aquí está el mismo comando, pero con esta opción habilitada:
Entonces puede ver que el comando de unión no verificó la entrada ordenada esta vez.
Conclusión
Unirse puede no ser una herramienta muy sencilla de entender, pero una vez que se acostumbre, podría actuar como un gran ahorro de tiempo para usted en algunas situaciones. Hemos cubierto la mayoría de las opciones de la línea de comandos aquí. Pruébelos y, una vez hecho esto, consulte la página de manual del comando para ver el resto.