Quiero escribir una shell script
que se produzcan dos archivos A
y B
, y conseguir un resultado como este:
Archivo A
:
user_a tel_a addr_a
user_b tel_b addr_b
Archivo B
:
process_1 user_a
process_2 user_a
process_3 user_b
Y el resultado:
user_a process_1 tel_a addr_a
user_a process_2 tel_a addr_a
user_b process_3 tel_b addr_b
¿Cómo puedo hacer esto? awk
¿o algo mas?
text-processing
awk
join
Navid Farhadi
fuente
fuente
cut
ypaste
solo, pero no entiendo bien el sintaxis.cut
ypaste
mira su página de manual.Respuestas:
join
...Salida
Los archivos de entrada deben ordenarse por el campo clave ... Sus archivos de ejemplo ya están ordenados, por lo que no era necesario, pero de lo contrario podría incorporar el orden de la siguiente manera.
fuente
man join
en la línea de comando del terminal ...-1 2 -2 1
significa: unirse en el '1er archivo 2do campo' y el ' 2do archivo 1er campo 'Dado
join
ypaste
no están disponibles en todas partes (no están en mi sistema basado en BusyBox, por ejemplo), aquí es cómo hacerlo con awk, conforme a lo solicitado:fuente
A[$1]=$2 OFS $3
... Aquí hay otra variante que evita el bucle manual en COMENZAR, pero es más o menos lo mismo (para awk ), aunque introduce una prueba de condición innecesaria para el segundo archivo:awk 'NR==FNR {A[$1]=$2 OFS $3;next} {print $2, $1, A[$2]}' fileA fileB
... (+ 1)