根据行号将列附加到文件

根据行号将列附加到文件

我有一个数字列表,我想将其添加到另一个文件的末尾作为最后一列:

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

前面的数字(1,5 和 6)表示这些数字必须附加到目标文件中的哪一行,因此第一行以 结尾.196,第五行以 结尾,.964依此类推。通常paste file1 file2不考虑行号,只是1:.196在第一行末尾和.964第二行末尾添加,而不是在第五行末尾添加。有什么想法如何以正确的方式做到这一点?

预期会是这样的:

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. 

相关内容