在Awk中增加0.3

时间:2013-08-09 00:16:21

标签: awk printf

我想打印从-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

2 个答案:

答案 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.37.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