行番号に基づいてファイルに列を追加します

行番号に基づいてファイルに列を追加します

別のファイルの末尾に最後の列として追加したい数字のリストがあります。

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

先頭の数字 (1、5、6) は、ターゲット ファイルのどの行に数字を追加する必要があるかを示します。つまり、1 行目は で終わり.196、5 行目は で終わり.964、というようになります。通常はpaste file1 file2行番号は考慮されず、1:.1961 行目の末尾と.9645 行目ではなく 2 行目の末尾にのみ追加されます。正しい方法を教えてください。

次のようなものが予想されます:

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

答え1

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

出力:

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

説明:

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

答え2

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

説明:

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

関連情報