Anexar uma coluna a um arquivo com base no número da linha

Anexar uma coluna a um arquivo com base no número da linha

Eu tenho uma lista de números que gostaria de adicionar ao final de outro arquivo como coluna final:

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

Os números na frente (1,5 e 6) indicam em qual linha os números devem ser anexados no arquivo de destino, de modo que a primeira linha termine com .196, a quinta com .964e assim por diante. O usual paste file1 file2não leva em consideração os números das linhas e simplesmente adiciona 1:.196no final da primeira linha e .964no final da segunda em vez da quinta. Alguma idéia de como fazer isso da maneira certa?

O esperado seria algo assim:

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

Responder1

Com 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

Saída:

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

Explicação:

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

Responder2

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

Explicação:

° 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. 

informação relacionada