输出磁盘大小仅以 GB 为单位。仅限千兆字节。
不是MB。不是兆字节。
不是结核病。不是太字节。
到目前为止已测试:
sudo blockdev --getsize64 /dev/sda
1000204886016
sudo blockdev --getsize64 /dev/sda |bc -l |awk '{print $1/1000000000}'
1000.2
sudo blockdev --getsize64 /dev/sda |bc -l |awk '{print $1/1000000000}' |numfmt --field=1- --format=%.0f --invalid=ignore
1001
但上面的1001
输出是一个舍入误差。
1000
是理想输出,表示1000 GB
磁盘大小。
问题1:
如何解决上述舍入错误?
问题 2:
与下面的 120 个字符相比,哪种更优雅或更短的方式:
sudo blockdev --getsize64 /dev/sda |bc -l |awk '{print $1/1000000000}' |numfmt --field=1- --format=%.0f --invalid=ignore
。
。
使用:
neofetch --stdout |grep 'OS:'
操作系统:Kubuntu 22.04.3 LTS x86_64
--
严格来说,这并不是numfmt使用的舍入方法下的舍入误差,其中有几种。您需要选择所需的舍入行为,可能
--round=nearest
是大多数人期望的舍入行为:但是,由于您只想要一个特定的单位(GB),因此在您已经使用 awk 完成除法之后,numfmt 在这里完全是多余的 - 它为您所做的就是添加“G”,并且您已经可以从 awk 本身做到这一点,以及使用 awk 自己的浮点(甚至整数)格式,其中
%.0f
始终使用最接近的舍入(和%d
截断)。在您的示例中似乎
bc -l
是多余的,因为您实际上并未在“bc”内执行任何操作,但您也可以使用它:如果截断(向下舍入)足够好,您还可以在
$(( ... ))
or内使用 Bash 的整数算术(相同,但后者是非标准):$[...]