如果阈值低于最小值,则Bash +计算警报

时间:2014-09-30 07:53:43

标签: linux bash perl shell awk

我创建了以下命令以获取总内存和已用内存

      top -n1 | grep Mem | awk '{print "TOTAL="$3" USED="$7}'

我需要打印"内存低于20%"

 echo "memory is under 20%"

如果已用内存小于或等于20%

请用bash建议如何计算?还是awk?或perl one liner?

2 个答案:

答案 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