0

当我在 Unix 环境中执行以下命令时,我在 Cygwin 中遇到问题,然后输出与 Cygwin 相比有所不同

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

输出是 Unix

36703386618

输出在 Cygwin

3.67034e+10

请协助

4

1 回答 1

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 重定向从字符串/变量中获取标准输入,而不必执行echo "$var" |

于 2013-10-10T14:39:53.340 回答