separador print examples columnas campos awk calculated-columns multiple-files multiplying

print - Usando awk, ¿cómo combino datos en dos archivos y sustituyo los valores del segundo archivo al primer archivo?



awk-v examples (2)

awk solución:

awk -F'';'' ''NR==FNR{a[$1]=$2; next}{if($1 in a) $0=$0 FS a[$1]; print}'' file2 file1

La salida:

A1;1;2 A2;2;1 A3;3;0.5 A1;1;2 A2;2;1 A3;3;0.5

  • NR==FNR - procesamiento del primer archivo, es decir, file2

  • a[$1]=$2 - acumulando valores adicionales para cada tecla

  • if($1 in a) $0=$0 FS a[$1] - valor agregado si la primera columna coincide

¿Alguna idea de cómo usar awk?

Dos archivos de entrada, data.txt y keys.txt:

data.txt contiene algunos datos:

A;1 B;2 A;3

keys.txt contiene pares de "clave; valor" ("C" en este ejemplo no es parte de data.txt, pero el script awk aún debería funcionar):

A;30 B;20 C;10

El resultado debería ser el siguiente:

A;1;30 B;2;20 A;3;30

Por lo tanto, cada fila en data.txt que contenga cualquier clave de keys.txt debe tener el valor correspondiente anexado a la fila en data.txt.


awk al rescate!

asume que el segundo archivo tiene claves únicas a diferencia del primer archivo (si no es necesario, debe especificar qué sucede entonces)

$ awk ''BEGIN {FS=OFS=";"} NR==FNR {a[$1]=$2; next} $1 in a {print $0,a[$1]}'' file2 file1 A;1;30 B;2;20 A;3;30

PD. tenga en cuenta el orden de los archivos ...