0

我想以 0.3 的增量打印从 -0.6 到 +6.9 的数字范围:

-0.6
-0.3 
0.0 
0.3
...
6.9

我知道它可以通过以下方式完成,例如,对于从 1 到 7 的数字范围,增量为 1:

for ((run=1;run<8;run++))
do
printf "%s " $num
done

但是同样的想法在这里不起作用(另外,我猜 run++0.3 是不正确的):

for ((run=-0.3;run<7.2;run++0.3))
do
printf "%s " $num
done
4

2 回答 2

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
    }
}
于 2013-08-09T00:50:18.000 回答
0

如果您必须处理更多浮点数,您也可以考虑 bc。

要在 shell 脚本中包含内联的 bc 语句,将其通过管道传输到 bc - 例如

echo 'for ( a=-0.6; a<=6.9; a=a+0.3) { print a,"\n"; }' | bc
于 2013-08-09T10:24:18.483 回答