用shell格式化数字

时间:2014-12-11 18:57:10

标签: shell ubuntu

我有这个脚本:

var=$(cat /proc/meminfo | grep MemFree | sed 's/[^0-9]//g')
echo "$(($var / 1024)) MB / 12.288 MB Memory free\n"

输出如下内容:

10887 MB / 12.288 MB Memory free

但为了更好的可读性,我希望第一个数字与此10.887一样,我尝试了numfmt,但出于某些原因,它不包含在我的destro或coreutils中。

编辑:由于一些误解:这是欧洲格式,所以我们用"。"和","启动和十进制数字

2 个答案:

答案 0 :(得分:1)

您可以使用awk替换代码:

awk '/MemTotal/{m=$2/(1024*1024)}
     /MemFree/{printf "%.3f GB / %.3f GB Memory free\n", $2/(1024*1024), m}' /proc/meminfo
1.721 GB / 3.675 GB Memory free

答案 1 :(得分:0)

printf(以及朋友)可以使用(根据手册页)SUSv2格式标记'来执行此操作。

因此,如果您的语言环境设置正确,这应该可以达到您想要的效果。

memfree=$(sed -ne '/MemFree/{s/[^0-9]//g;p}' /proc/meminfo)
printf "%'d MB / 12.288 MB Memory free\n" "$((memfree / 1024))"