从 free -m 命令中获取单独的已用内存信息

KK *_*tel 6 memory shell-script text-processing

作为free -m命令的输出,我得到以下信息:

             total       used       free     shared    buffers     cached
Mem:          2496       2260        236          0          5        438
-/+ buffers/cache:       1816        680
Swap:         1949         68       1881
Run Code Online (Sandbox Code Playgroud)

我只想获得使用过的内存,如 2260,作为输出。我尝试了以下命令:

free -m | grep Mem | cut -f1 -d " " 
Run Code Online (Sandbox Code Playgroud)

帮助我改进我的命令。

我怎样才能得到它的百分比,比如 35%?

jas*_*yan 7

您可以awk在不需要单独grep管道的情况下使用:

awk '/^Mem/ {print $3}' <(free -m)
Run Code Online (Sandbox Code Playgroud)

其中记录/行以 开头的记录/行被过滤,Mem第三个字段/列 ( $3) 为过滤的记录打印。


小智 6

或者使用 sed:

free -m | sed -n 's/^Mem:\s\+[0-9]\+\s\+\([0-9]\+\)\s.\+/\1/p'
Run Code Online (Sandbox Code Playgroud)

另一个解决方案是:

free -m  | grep ^Mem | tr -s ' ' | cut -d ' ' -f 3
Run Code Online (Sandbox Code Playgroud)

第二个解决方案的学分请参见这篇文章


pet*_*rph 5

至于显示为百分比的附加问题(基于 jasonwryan 的回答):

awk '/^Mem/ {printf("%u%%", 100*$3/$2);}' <(free -m)
Run Code Online (Sandbox Code Playgroud)

通过将第 3 个字段除以第 2 个来获取百分比并打印为整数(没有四舍五入!)。

编辑:在printf(第一个转义用于打印的文字字符)中添加了双 '%' 。