为数组中的每列添加不同的值

时间:2013-11-28 20:29:16

标签: bash awk

如何在bash脚本中为每列添加不同的值?

示例:在x

上绘制的三个函数f1(x)f2(x)f3(x)

TEST.DAT:

# x  f1    f2    f3 
1    0.1  0.01  0.001
2    0.2  0.02  0.002
3    0.3  0.03  0.003

现在我想为每个函数添加一个不同的偏移值

values = 1 2 3

期望的结果:

# x  f1    f2    f3 
1    1.1  2.01  3.001
2    1.2  2.02  3.002
3    1.3  2.03  3.003

因此第一列应该不受影响,否则添加值。

我尝试了这个,但它不起作用

declare -a energy_array=( 1 2 3 )

for (( i =0 ; i <  ${#energy_array[@]} ; i ++ ))
do
local energy=${energy_array[${i}]}
cat "test.dat" \
 | awk -v "offset=${energy}" \ 
'{ for(j=2; j<NF;j++) printf "%s",$j+offset OFS; if (NF) printf "%s",$NF; printf ORS} '
done 

1 个答案:

答案 0 :(得分:5)

您可以尝试以下操作:

declare -a energy_array=( 1 2 3 )
awk -voffset="${energy_array[*]}" \
'BEGIN { n=split(offset,a) } 
 NR> 1{ 
   for(j=2; j<=NF;j++) 
      $j=$j+a[j-1]
   print;next
 }1' test.dat

输出:

# x  f1    f2    f3 
1 1.1 2.01 3.001
2 1.2 2.02 3.002
3 1.3 2.03 3.003