HPUX 大数字转换以避免 2.13464e+07 等数字

HPUX 大数字转换以避免 2.13464e+07 等数字

我需要将 21858717696 除以 1024 才能获得 hpux 上的千字节,但使用以下命令不起作用:

echo 21858717696 | awk '{print $1/1024}'

输出:

2.13464e+07

在 AIX 上我可以使用以下命令并且它可以工作:

echo 21858717696 | awk '{print $1/1024}' | bc -l | awk '{printf("%.0f\n", $1)}'

输出:

21346404

在 HPUX 上使用 AIX 方法不起作用。如何在 HPUX 上获得相同的结果?

答案1

您的 HP-UX 上应该有 perl:

echo 21858717696|perl -ne 'printf "%.0f\n",$_/1024'
21346404

答案2

我就是这样做的dc <<< "21858717696 1024/ p"

  • 我认为dc几乎所有 Unix 上都会默认安装。它挂满了我自 1991 年以来使用过的所有东西。
  • 我是一个进程。
  • 它给出了准确且精确的结果。

如果你的 shell 不这样做,<<<那么就这样做

echo "21858717696 1024/ p" | dc

答案3

由于您已经在使用bc

$ printf '%s/1024\n' 21858717696 | bc
21346404

或者

$ echo '21858717696/1024' | bc
21346404

或任何其他可以让bc您进行计算的组合。scale如果您想设置所需的小数位数(默认情况下为零),请包含一个赋值:

$ printf '%s\n' 'scale=4' '21858717696/1024' | bc
21346404.0000

主要的事情是让我们bc进行实际的计算。

答案4

为什么不直接打印 awk 的结果呢?你不需要第二个 awk :

$ echo 21858717696 | awk '{printf "%.0f\n", $1/1024}'
21346404

除非我遗漏了什么,否则这与您的第二个命令完全相同:

$ echo 21858717696 | awk '{print $1/1024}' | bc -l | awk '{printf("%.0f\n", $1)}'
21346404

在我的 Linux 系统上,我只能使用更大的数字和 busybox awk 来重现这一点:

$ echo 12321858717696000000000 | ./awk '{print $1/1024}'
1.20331e+19

但即使使用 busybox awk,也能printf按预期工作:

$ echo 12321858717696000000000 | ./awk '{printf "%.0f\n",$1/1024}'
12033065153999998976

相关内容