我试图做我觉得很简单的任务,但我碰到了一个奇怪的问题,不幸的是,我有限的Bash经验(我通常使用Ruby的脚本)我需要一些帮助。
我所要做的就是编写一个简单的检查CPU利用率的脚本,如果利用率超过一个特定的数量,它会做一些事情。
所以我从头开始捕获CPU利用率,如下所示:
CPU_SUMMARY=(`top -b -n 1 | grep ^Cpu`)
不幸的是,当我检查这个结果的时候,我从一开始就得到了一些额外的信息:
$ echo $CPU_SUMMARY 24ms, 0.8y, 0.0ubuntui, 97.77d, 0.2Tue 9a, 0.0137i, 0.0i, 0.2tCpu(s): 1.1%us, 0.8%sy, 0.0%ni, 97.7%id, 0.2%wa, 0.0%hi, 0.0%si, 0.2%st
“24ms,0.8y … 0.2t”从哪里来? 如果我运行相同的命令top -b- n 1 | grep ^Cpu top -b- n 1 | grep ^Cpu没有试图分配给variables,我得到:
Cpu(s): 1.1%us, 0.8%sy, 0.0%ni, 97.7%id, 0.2%wa, 0.0%hi, 0.0%si, 0.2%st
所以我只是有点困惑,为什么最初24ms …文本来自。
我甚至尝试提取我想要的位,忽略了下面的附加文本:
$ echo $CPU_SUMMARY | grep -o -E "[0-9\.]+%us" 24ms, 0.8y, 0.0ubuntui, 97.77d, 0.2Tue 9a, 0.0142i, 0.0i, 0.2t | grep -o -E "[0-9\.]+s"1.1%us
我得到同样的东西?
我是Ubuntu的12.04。
谢谢你的帮助。
马特
如果你想改善你的例子使用egrep
$ echo $CPU_SUMMARY | egrep -o '([0-9\.]+%us)' 1.1%us
另一方面,这将总结所有的CPU使用率(例如ps输出的第3列)
$ ps fuxw | awk '{ if ($3 ~ /^[0-9]/) {SUM +=$3}} END {print SUM"%"}' 18.5%