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%?
您可以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)
第二个解决方案的学分请参见这篇文章。
至于显示为百分比的附加问题(基于 jasonwryan 的回答):
awk '/^Mem/ {printf("%u%%", 100*$3/$2);}' <(free -m)
Run Code Online (Sandbox Code Playgroud)
通过将第 3 个字段除以第 2 个来获取百分比并打印为整数(没有四舍五入!)。
编辑:在printf(第一个转义用于打印的文字字符)中添加了双 '%' 。