我有一个包含top -b
输出的文件。现在我想获得使用超过100MB内存或超过5%CPU的进程。
我写过的脚本但它没有正常工作。
while read line
do
curr_PID=`echo $line | awk '{print $1}'`
curr_USE=`echo $line | awk '{print $2}'`
curr_MEM=`echo $line | awk '{print $6}'`
curr_MEM2=`echo $line | awk '{print $6}' | cut -d '=' -f2 | sed 's/.$//'`
curr_CPU=`echo $line | awk '{print $10}' | cut -d '=' -f2 | sed 's/.$//'`
curr_CMD=`echo $line | awk '{print $11}'`
mem_type=`echo $curr_MEM | awk '{print substr($0,length,1)}'`
if [ "$mem_type" = "K" ]
then
# temp_curr_MEM=$(expr $curr_MEM / 1024)
echo "Hi"
fi
if [ "$curr_CPU" -gt 5 ] || [ "$curr_MEM2" -gt 50 ]
then
echo $line
fi
done < top_output_sorted.tmp
答案 0 :(得分:0)
在awk
中完成整个处理将更容易,更易读,更快捷。例如,您的问题的CPU部分可以通过以下方式实现:
$ top -b -n 1 | awk -v cpu=5 '$1=="PID"{t=1} t && $9>cpu'
31502 foo 25 5 38984 9292 2168 R 12 0.0 0:00.06 perl
这可以很容易地扩展到与您感兴趣的任何内存列匹配,只需确保正确考虑单位转换。
另外,您可能需要考虑使用dstat
来收集此类信息。