我创建了以下命令以获取总内存和已用内存
top -n1 | grep Mem | awk '{print "TOTAL="$3" USED="$7}'
我需要打印"内存低于20%"
echo "memory is under 20%"
如果已用内存小于或等于20%
请用bash建议如何计算?还是awk?或perl one liner?
答案 0 :(得分:2)
top -n1 | grep Mem | awk '{print "TOTAL="$3" USED="$7; per=$7/$3*100; if(per<=20) print "memory is under 20%" }'
将产生输出
TOTAL=1944532k USED=176456k
memory is under 20%
是什么?
per=$7/$3*100
计算百分比
if(per<=20) print "memory is under 20%"
检查per
,百分比是否小于20%,如果是则打印消息。
OR
top -n1 | grep Mem | awk '{print "TOTAL="$3" USED="$7; per=int($7)/int($3)*100; if(per<=20) print "memory is under 20%" }'
将产生输出
TOTAL=1944532 USED=176456
memory is under 20%
将字符串值截断为int。通过从输出中删除k
来查看与早期输出的差异
答案 1 :(得分:1)
您可以从/proc/meminfo
获取meminfo,因此我们可以保存top/ps/free..
输出解析/ grepping。怎么样:
awk '/^MemTotal/{t=$2}/^MemFree/{f=$2}
END{printf "Used Mem: %.2f%\n", 100*(t-f)/t}' /proc/meminfo
这会打印出使用过的mem百分比。输出如:
Used Mem: 84.76%
此行仅在使用百分比&lt; = 20%:
时输出使用过的mem信息awk '/^MemTotal/{t=$2}/^MemFree/{f=$2}
END{p=100*(t-f)/t; if(p<=20)printf "Used Mem<20%: %.2f%\n",p}' /proc/meminfo