2011-10-21 28 views

Respuesta

22

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.
+1

Podría explicar el comando. Gracias – saloua

+0

@saloua Agregué algunas explicaciones. ¡Espero que ayude! –

+1

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

Cuestiones relacionadas