Agregar una columna a un archivo según el número de línea

Agregar una columna a un archivo según el número de línea

Tengo una lista de números que me gustaría agregar al final de otro archivo como columna final:

1:.196
5:.964
6:.172

Los números delante (1, 5 y 6) indican en qué línea se deben agregar los números en el archivo de destino, de modo que la primera línea termine con .196, la quinta con .964y así sucesivamente. Lo habitual paste file1 file2no tiene en cuenta los números de línea y simplemente suma 1:.196al final de la primera línea y .964al final de la segunda en lugar de la quinta. ¿Alguna idea de cómo hacerlo de la manera correcta?

Lo esperado sería algo como esto:

Lorem Ipsum 1238 Dolor Sit 4559.196
Lorem Ipsum 4589 Sit elitr 1234
Lorem Ipsum 3215 Dolor Sit 5678
Lorem Ipsum 7825 Dolor Sit 9101
Lorem Ipsum 1865 Dolor Sit 1234.964

Respuesta1

Con awk:

# create two test files
printf '%s\n' one two three four five six > target_file
printf '%s\n' 1:.196 5:.964 6:.172 > numbers

awk -F':' 'NR==FNR{ a[$1]=$2; next } FNR in a{ $0=$0 a[FNR] }1' numbers target_file

Producción:

one.196
two
three
four
five.964
six.172

Explicación:

awk -F':' '      # use `:` as input field separator
  NR==FNR {      # if this is the first file, then...
    a[$1]=$2     # save the second field in array `a` using the first field as index
    next         # stop processing, continue with the next line
  }                         
  FNR in a {     # test if the current line number is present in the array
    $0=$0 a[FNR] # append array value to the current line 
  }
  1              # print the current line
' numbers target_file

Respuesta2

$ sed 's/:/s:$:/;s/$/:/' nums_file |
  sed -f - file

Explicación:

° use the number file to create the sed commands to operate on the actual data
° Pass these sed commands over the pipe and use sed to apply them on the data file. 

información relacionada