给定一个文件的字节大小,我想将其格式化为1003 101 with trailing zeros,例如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

(文件不是那么大,所以我不必考虑更大的单位.)

编辑:这还有一个问题.见下面阿德里安·弗鲁霍斯的 comments .

推荐答案

GNU Coreutils包含一个显然相当未知的小工具,名为numfmt,用于数字转换,它可以满足您的需要:

$ numfmt --to=iec-i --suffix=B --format="%.3f" 4953205820
4.614GiB

我认为这很适合你的需要,而且没有其他答案那么大或粗俗.

如果你想要一个更强大的解决方案,看看我的另一个答案.

Linux相关问答推荐

排除最大FIFO大小故障

用户作用域在Linux内核密钥环(Golang)中是什么意思?

不带空格的字符串连接形成文件路径

如何让xargs对 bash 脚本中find命令找到的所有文件执行?

文件未在脚本中使用 cp 命令复制到 Docker 容器中

`std::cout` 是如何实现的?

有什么方法可以知道在发送之前将在 TCP 上发送多少字节?

如何使用 Bash 读取文件中的倒数第二行?

RealUID,保存的 UID,有效的 UID.这是怎么回事?

无法覆盖符号链接 RedHat Linux

如何使用文件描述符刷新写入?

将 CMake 项目导入 Eclipse CDT

判断 VT-x 是否已激活而无需在 Linux 中重新启动?

如何找到只对所有者具有特定权限的文件?

在 Linux / Mono 上运行 ServiceStack 的最佳方式是什么?

在类 Unix 系统中上次运行的 cron 作业(job)的详细信息?

svn over HTTP 代理

从文件中随机 Select 行而不用 Unix 啜饮它

Ionic android 构建错误 - 找不到ANDROID_HOME环境变量

未找到版本CXXABI_1.3.8(...要求)