如何在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
答案 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