我有一个名为params.dat的数据文件,我想在每次运行代码时更改文件中的值。
这是我到目前为止所得到的
i=7.0
k=0
i=0
while [ $i -lt 10]
do
sed "3s/.*/$j 6.9 $j/" "28s/.*/image$i.bmp/" params.dat
((i++))
((k++))
((j=j-0.1))
done
目标是从
更改日期文件的第3行和第28行7.0 7.0 7.0
到
6.9 7.0 6.9
每次基本减去第一和第三个值
并从
更改第28行image0.bmp
到
image1.bmp
所以第一次我的程序需要7.0 7.0 7.0和image0.bmp
第二次我希望它运行6.9 7.0 6.9和image1.bmp 等等...
任何人都可以给我一些如何完成它的提示吗?
提前感谢!
答案 0 :(得分:0)
使用awk:
#!/bin/bash
# set iter to be the number of times to execute the script
# alternatively use $1 and pass it as parameter to the script
iter=10
for (( i=1; i<=$iter; i++ )); do
awk 'NR==3 {print $1-0.1, $2, $3-0.1; FS="[e.]"}
NR==28 {print $1 "e" $2+1 "." $3}
NR!=3 && NR!=28 {print}' params.dat > .tmpfile
mv .tmpfile params.dat
done
awk代码将到达第3行并从第一个和第三个字段中减去0.1,默认情况下由空格分隔。然后它将字段分隔符设置为“e”或句点。然后,当我们到达第28行时,该行分为三个字段:'imag' <field separator 'e'> '0' <field separator '.'> 'bmp'
我们增加第二个字段并打印结果。所有其他线条都将以它们的方式打印。