记录某个进程任意的采集时间内,top 10 的cpu和内存值的平均和求和

#!/bin/bash
log=/tmp/`date "+%Y-%m-%d_%H_%M"`.top

pid=$1
countStep=5

step=$(($2/$countStep))
for((i=0;i<$step;i++));do
top -p $pid -b -d 1 -n 1|grep $3|awk '{print strftime("%Y-%m-%d %H:%M:%S"),$0;}' >> $log
sleep $countStep
done
#将上面循环读取的信息发送到文件,通过AWK来处理文件,取出top10,计算求和值和平均值
cat $log | sort -k11nr|head -n 10|
awk '
   {
        processCpu[$3]+=$11
        processMem[$3]+=$12
    
    }
   END {
      for(i in processCpu) {

        printf("pid:%-6s:cpu %s %.2f ",i, processCpu[i],processCpu[i]/NR );

      }
     for(i in processMem) {
        printf("pid:%-6s:mem %s %.2f ",i, processMem[i],processMem[i]/NR );
      }
    }
'

awk使用规则记录

BEGIN{}#运行前,通常一些变量的定义和赋值

{}#运行中,做一些操作

END{}#运行后

awk '' log.log        其中''接一些参数,一般为自己的一些对文件的过滤条件

原文地址:https://www.cnblogs.com/xierunfang/p/7196849.html