我需要将 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