我想打印从-0.6到+6.9的数字范围,增量为0.3:
-0.6
-0.3
0.0
0.3
...
6.9
我知道可以这样做,例如,对于从1到7的数字范围,以下列方式增加1:
for ((run=1;run<8;run++))
do
printf "%s " $num
done
但是同样的想法在这里不起作用(我猜运行++ 0.3是不正确的):
for ((run=-0.3;run<7.2;run++0.3))
do
printf "%s " $num
done
答案 0 :(得分:2)
你的第一个问题是你的示例代码是shell语法(可能是bash),而不是awk。 bash不进行浮点运算,至少不是直接运算。
你的第一个循环,在awk中,看起来像这样:
for (run = 1; run < 8; run ++) {
print run
}
使用awk语法再次进行第二次循环的显而易见(但可能不正确)的方法是:
for (run = 0.3; run <= 7.2; run += 0.3) {
print run
}
(您的问题已被编辑过一次或两次,我不确定您想要的上限;我会假设<= 7.2
是您正在寻找的。)
但由于浮点舍入错误,可能会省略最终的7.2
。 (它恰好在我的系统上运行,但我不会指望它。0.3
和7.2
都不能完全用二进制浮点表示。)
您可以使用整数迭代范围,然后除以10来可靠地覆盖整个范围:
for (run = 3; run <= 72; run += 3) {
print run / 10
}
将其转换为自包含的可执行脚本:
#!/usr/bin/awk -f
BEGIN {
for (run = 3; run <= 72; run += 3) {
print run / 10
}
}
答案 1 :(得分:0)
如果你需要处理更多的浮点数,你也可以考虑bc。
要在shell脚本中包含内联的bc语句,请将其输入bc - 例如
echo 'for ( a=-0.6; a<=6.9; a=a+0.3) { print a,"\n"; }' | bc