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 teclaif($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 ...