用shell格式化数字

用shell格式化数字,shell,ubuntu,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我尝试过,但由于某些原因,它没有包含在我的destro或coreutils中 编辑:由于一些误解:这是欧洲格式,因

我有这个剧本:

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
我尝试过,但由于某些原因,它没有包含在我的destro或coreutils中


编辑:由于一些误解:这是欧洲格式,因此我们用“.”分隔,十进制数字以“,”开头。

您可以将代码替换为
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
printf
(和朋友)可以使用(根据手册页)
SUSv2
格式标志

因此,如果您的语言环境设置正确,这应该满足您的需要

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

另外,整个第一条管道可以简化为
sed-ne'/MemFree/{s/[^0-9]//g;p}'/proc/meminfo
。请参阅我的答案。(忽略lua位,
printf
位是重要的部分。)mhh在我的例子中,它输出10905.410 MB,因此它增加了3位;D但我想分组,比如1.000.000Ahh,我知道,我有点不清楚,我住在哪里,我们不用逗号分隔数字,我们使用点。你会说1.23公斤(=1230克)我们说1.23公斤:)这里试图用整数来分开位置单位。不表示数字的小数单位。编辑后,它对我有用,很好!谢谢!:)我进一步编辑,也从相同的
/proc/meminfo
中获得总物理内存。