当我在Unix环境中执行以下命令时,我遇到了Cygwin的一个问题,那么与Cygwin相比,输出会有所不同
echo 0000036703386618|awk '{$1=$1+0; print $1}'
输出在Unix
36703386618
输出在Cygwin中
3.67034e+10
请协助
答案 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" |