脚本没有给出正确的Cygwin输出

时间:2013-10-10 14:01:27

标签: shell

当我在Unix环境中执行以下命令时,我遇到了Cygwin的一个问题,那么与Cygwin相比,输出会有所不同

echo 0000036703386618|awk '{$1=$1+0; print $1}'

输出在Unix

36703386618

输出在Cygwin中

3.67034e+10

请协助

1 个答案:

答案 0 :(得分:2)

awk实际上并不将值存储为整数,而是将其存储为浮点值,因此输出错误可能会导致输出错误,因为输出器无法显示>非科学格式的32位值(这只是猜测,但是当我们切换到mawk时会发生这种情况)

natsu ~> echo 0000036703386618|mawk '{$1=$1+0; print $1}'
3.67034e+10
natsu ~> echo 0000036703386618|gawk '{$1=$1+0; print $1}'
36703386618

请记住,由于值的内部表示,它会产生一些不良结果:

natsu ~> echo 0000036703386618000000000|gawk '{$1=$1+0; print $1}'
36703386617999998976

但是,一旦处理了64位数字,就应该开始使用正确处理它们的东西 - 例如BC

natsu ~> bc <<<"0000036703386618000000000 + 0"
36703386618000000000

...前面的示例使用<<< bash重定向从字符串/变量中获取stdin,而不必执行echo "$var" |