intento:
awk 'FNR==NR{a[NR]=$3;next}{$2=a[FNR]}1' f2 f1
Salida:
111 000 444
222 111 555
333 555 666
Explicación del código anterior:
FNR==NR
todo le permite trabajar con un archivo completo a la vez. En este caso, es el archivo f2
. NR
y FNR
ambos contienen números de línea con la diferencia FNR
se restablece a 1 cuando se lee un archivo nuevo donde NR
continúa incrementándose.
- Mientras que estamos trabajando con
f2
archivo, estamos creando una matriz llamada a
utilizando número de línea (NR
) como la columna key
y tercero ($3
) como el valor. next
nos permite omitir el resto del bloque de acción.
- Una vez que finaliza el archivo
f2
, comenzamos a trabajar en el archivo f1
. NR==FNR
condición no se convertirá en falso ya que FNR
aumentará desde 1 y NR
no lo hará. Por lo tanto, solo se trabajará en el segundo bloque de acción {$2=a[FNR]}
.
- Lo que hace este bloque es reasignar el valor de la segunda columna al valor de la matriz al buscar el número de la línea.
1
al final imprime la línea. Devuelve verdadero, y en awk
declaraciones verdaderas resulta en la impresión de la línea.
f2 f1
es el orden de los archivos definidos. Como queremos crear una matriz a partir del archivo f2
, la ponemos primero.
Podría explicar el comando. Gracias – saloua
@saloua Agregué algunas explicaciones. ¡Espero que ayude! –
Mi caso de uso es muy ligeramente diferente (solo ligeramente). La diferencia es que tenía un archivo delimitado por comas para f1 y f2 en lugar de espacio delimitado. Probé tu mismo comando con la opción '-F,' pero el archivo de salida no tenía coma en ese caso. Cualquier forma de arreglar esto? – Ganesh