给定文件大小(以字节为单位),我想使用 IEC(二进制)前缀 将其格式化为 3个 有效数字,并带有结尾的零,例如1883954变为1.80M。
bash不支持浮点算术,因此我改用awk。问题是我不怎么保持尾随零。当前解决方案:
if [ $size -ge 1048576 ] then size=$(awk 'BEGIN {printf "%.3g",'$size'/1048576}')M elif [ $size -ge 1024 ] then size=$(awk 'BEGIN {printf "%.3g",'$size'/1024}')K fi
(文件不是那么大,所以我不必考虑更大的单位。)
编辑:这还有另一个问题。请参阅下面的AdrianFrühwirth的评论。
GNU Coreutils包含一个显然不为人所知的numfmt用于数字转换的小工具,它可以满足您的需求:
numfmt
$ numfmt --to=iec-i --suffix=B --format="%.3f" 4953205820 4.614GiB
我认为这很适合您的需求,并且不如其他答案那么大。
如果您需要更强大的解决方案,请查看我的其他答案。