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