【发布时间】:2013-04-06 18:10:27
【问题描述】:
考虑到文件的大小(以字节为单位),我想将其格式化为 IEC (binary) prefixes 到 3 significant figures 并带有尾随零,例如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
(文件没有那么大,所以我不必考虑更大的单位。)
编辑:这还有另一个问题。请参阅下面的 Adrian Frühwirth 的评论。
【问题讨论】:
-
这有点hack,但你能不能不转换成字符串,检查小数点后的长度,必要时加零?
-
GNU
ls命令接受-lh选项... -
@Basile Starynkevitch:不是我想要的格式。 3 平方英尺尾随零。
-
假设您的 elif 文件大小为 1048575,您确定要此输出吗?
$ echo "1048575" | awk '{ printf "%.3gK\n", $1/1024 }'=>1.02e+03K. -
@Adrian Frühwirth:该死的我忘了。我最初使用 SI 单位,这不会有问题,但我决定更传统(这是用于索引文件)。