控制脚本,
stat.sh
PID_NUM=$$ PID_FILE=stat.pid #echo "pid : "$PID_NUM PROG_NAME=$0 ACTION=$1 usage() { echo "Usage: ${PROG_NAME} {start|stop|restart}" exit 1; } start(){ sh ./stat_run.sh & PID_NUM=$! echo "worker pid is " $PID_NUM echo ${PID_NUM} > ${PID_FILE} } stop(){ PID_NUM=`cat ${PID_FILE}` if [ "" != "${PID_NUM}" ]; then echo kill pid is "${PID_NUM}" kill ${PID_NUM} fi } case "${ACTION}" in start) start ;; stop) stop ;; restart) stop sleep 1 start ;; *) usage ;; esac
其中$$ 表示当前正在运行的进程的pid,$!表示最近的上一个进程pid
真正运行统计程序的脚本
cat stat_run.sh STAT_FILE=stat_delay.log echo "" > $STAT_FILE while true; do tail -n10000 perf.log | awk '{print $8}' | grep totalAll | awk -F, 'BEGIN {cnt=0;total=0} {cnt=cnt+1;total=total+$3} END{print '"\"$(date +%Y-%m-%d-%H:%M:%S)\""', total/cnt}' >> $STAT_FILE; sleep 5; done;
上面脚本,每5秒统计最新生成的10000条记录的平均值
在awk中每行打印当前时间
[admin@v021130.sqa.cm4 logs]$ cat test.log 2013-07-30-23:00:12 44.5791 2013-07-30-23:00:17 44.5791 2013-07-30-23:00:22 44.5791 2013-07-30-23:00:27 44.5791 2013-07-30-23:00:32 44.5791 2013-07-30-23:00:37 44.5791 2013-07-30-23:00:42 44.5791 2013-07-30-23:00:47 44.5791 2013-07-30-23:00:52 44.5791 2013-07-30-23:00:58 44.5791 [admin@v021130.sqa.cm4 logs]$ awk '{print '"\"$(date +%Y-%m-%d-%H:%M:%S)\""', $1}' test.log 2013-07-30-23:01:21 2013-07-30-23:00:12 2013-07-30-23:01:21 2013-07-30-23:00:17 2013-07-30-23:01:21 2013-07-30-23:00:22 2013-07-30-23:01:21 2013-07-30-23:00:27 2013-07-30-23:01:21 2013-07-30-23:00:32 2013-07-30-23:01:21 2013-07-30-23:00:37 2013-07-30-23:01:21 2013-07-30-23:00:42 2013-07-30-23:01:21 2013-07-30-23:00:47 2013-07-30-23:01:21 2013-07-30-23:00:52 2013-07-30-23:01:21 2013-07-30-23:00:58 [admin@v021130.sqa.cm4 logs]$ awk '{print '"\"$(date +%Y-%m-%d-%H:%M:%S)\""', $2}' test.log 2013-07-30-23:01:27 44.5791 2013-07-30-23:01:27 44.5791 2013-07-30-23:01:27 44.5791 2013-07-30-23:01:27 44.5791 2013-07-30-23:01:27 44.5791 2013-07-30-23:01:27 44.5791 2013-07-30-23:01:27 44.5791 2013-07-30-23:01:27 44.5791 2013-07-30-23:01:27 44.5791 2013-07-30-23:01:27 44.5791