需要帮助解析存储在文件中的`top -b`的输出

时间:2014-03-18 08:04:08

标签: shell scripting

我有一个包含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

1 个答案:

答案 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来收集此类信息。