zhenda
作者zhenda·2013-04-25 19:18
数据库管理员·昆仑银行

快速批量统计执行时间

字数 6672阅读 1583评论 2赞 0
       最近在做POC测试,各种时间格式和较多含时间的文本需要统计;人工统计任务重,且容易出错,所以在统计时间时尤为头疼,所以花些时间,根据时间格式整理了如下文本,直接使用,大大提高工作效率,方便了自己,也希望能给大家带来方便。

常用的时间显示方式:

(1)时间格式
20130408012001   20130408012024
20130409012002   20130409012025
20130410012001   20130410012024
[db2inst1@localhost ~]$ cat test.txt |awk '{print (substr($2,9,2)*3600+substr($2,11,2)*60+substr($2,13,2))-(substr($1,9,2)*3600+substr($1,11,2)*60+substr($1,13,2))}' 

(2)时间格式
2013-04-15-10.03.39.866000    2013-04-15-10.04.48.651000
2013-04-15-10.03.39.867000    2013-04-15-10.04.48.652000
2013-04-15-10.03.39.867000    2013-04-15-10.04.48.152000

方法一:cat 1.sql | awk '{print (substr($2,12,2)*3600*1000000+substr($2,15,2)*60*1000000+substr($2,18,2)*1000000+substr($2,21,6))-(substr($1,12,2)*3600*1000000+substr($1,15,2)*60*1000000+substr($1,18,2)*1000000+substr($1,21,6))}'|awk '{a=$1/1000000} {print a}'

方法二:两列分别取值相减
cat bt.log |awk -F"." '{$9=$1*3600*1000000+$2*60*1000000+$3*1000000+$4;print $9}'|awk 'BEGIN{OFMT="%.2f"}{s+=$1;print s}' |awk -F "." '{print $1}' >>tbt.log
cat et.log |awk -F"." '{$9=$1*3600*1000000+$2*60*1000000+$3*1000000+$4;print $9}'|awk 'BEGIN{OFMT="%.2f"}{s+=$1;print s}' |awk -F "." '{print $1}' >>tet.log
paste q.txt qq.txt | awk '{$3=$2-$1; print $3}' |awk 'BEGIN{OFMT="%.2f"}{s+=$1;print s}' |awk -F "." '{print $1}'>> com.log

(3)时间格式

Thu Apr 18 16:14:34 CST 2013 Thu Apr 18 16:18:18 CST 2013   
Thu Apr 18 16:51:47 CST 2013 Thu Apr 18 16:55:08 CST 2013   
Thu Apr 18 15:33:57 CST 2013 Thu Apr 18 15:42:01 CST 2013   
Thu Apr 18 16:14:48 CST 2013 Thu Apr 18 16:18:18 CST 2013

cat 3.log  |awk '{print (substr($10,1,2)*3600+substr($10,4,2)*60+substr($10,7,2))-(substr($4,1,2)*3600+substr($4,4,2)*60+substr($4,7,2))}'

若如下格式可在命令行中添加sed -n '3,$p'  滤去头信息,如下所示:
datetime1                                        datetime2
============                                 =============
Thu Apr 18 16:14:34 CST 2013 Thu Apr 18 16:18:18 CST 2013    
Thu Apr 18 16:51:47 CST 2013 Thu Apr 18 16:55:08 CST 2013    
Thu Apr 18 15:33:57 CST 2013 Thu Apr 18 15:42:01 CST 2013    
Thu Apr 18 16:14:48 CST 2013 Thu Apr 18 16:18:18 CST 2013

cat 3.log  | sed -n '3,$p' |awk '{print (substr($10,1,2)*3600+substr($10,4,2)*60+substr($10,7,2))-(substr($4,1,2)*3600+substr($4,4,2)*60+substr($4,7,2))}'
---------------------------------------------------------------
统计执行时间案例
---------------------------------------------------------------
通过如上命令可直接显示某一文件中已整理好的格式,若各个时间文件比较分散,整理起来比较麻烦,通过以下例子,显示整理过程。
本案例是通过loadrunner 做压力测试, 20并发执行该SQL,每个并发执行三次该SQL。每个并发单独放在一个文件夹。
$ ls -l
total 832
drwxr-xr-x    2 db2inst1 db2grp1       16384 Apr 18 15:58 0
drwxr-xr-x    2 db2inst1 db2grp1       16384 Apr 18 16:00 1
drwxr-xr-x    2 db2inst1 db2grp1       16384 Apr 18 16:09 10
drwxr-xr-x    2 db2inst1 db2grp1       16384 Apr 18 16:00 11
drwxr-xr-x    2 db2inst1 db2grp1       16384 Apr 18 15:57 12
drwxr-xr-x    2 db2inst1 db2grp1       16384 Apr 18 15:57 13
drwxr-xr-x    2 db2inst1 db2grp1       16384 Apr 18 16:00 14
drwxr-xr-x    2 db2inst1 db2grp1       16384 Apr 18 16:12 15
drwxr-xr-x    2 db2inst1 db2grp1       16384 Apr 18 16:13 16
drwxr-xr-x    2 db2inst1 db2grp1       16384 Apr 18 16:13 17
drwxr-xr-x    2 db2inst1 db2grp1       16384 Apr 18 16:13 18
drwxr-xr-x    2 db2inst1 db2grp1       16384 Apr 18 16:14 19
drwxr-xr-x    2 db2inst1 db2grp1       16384 Apr 18 15:58 2
drwxr-xr-x    2 db2inst1 db2grp1       16384 Apr 18 15:59 3
drwxr-xr-x    2 db2inst1 db2grp1       16384 Apr 18 15:58 4
drwxr-xr-x    2 db2inst1 db2grp1       16384 Apr 18 15:59 5
drwxr-xr-x    2 db2inst1 db2grp1       16384 Apr 18 15:59 6
drwxr-xr-x    2 db2inst1 db2grp1       16384 Apr 18 16:04 7
drwxr-xr-x    2 db2inst1 db2grp1       16384 Apr 18 16:00 8
drwxr-xr-x    2 db2inst1 db2grp1       16384 Apr 18 16:11 9

单个并发里导出的时间格式。
$ cd 0
$ more start T03-test-07.sql
start T03-test-07.sql
Thu Apr 18 15:30:28 CST 2013
Thu Apr 18 15:32:51 CST 2013
end T03-test-07.sql
start T03-test-07.sql
Thu Apr 18 16:00:30 CST 2013
Thu Apr 18 16:06:37 CST 2013
end T03-test-07.sql
start T03-test-07.sql
Thu Apr 18 16:33:39 CST 2013
Thu Apr 18 16:39:29 CST 2013
end T03-test-07.sql

因通过脚本导出时间戳,所以每一个文本格式是一样。所以可以先提取三个时间的起始时间,再提取三个时间的终止时间。把两次提取的时间戳paste到一个文件里,执行上面的命令,完成了此次统计任务。

为更好方便统计,不用每次都切换到文件所在目录可用相对路径替代其中一个文本执行如下两个命令:
$awk '{if (NR==2||NR==6||NR==10) print }' ./0/T03-test-07.log  >>./sum/1T03-test-07.log  
$awk '{if (NR==3||NR==7||NR==11) print }' ./0/T03-test-07.log  >>./sum/2T03-test-07.log 
多个文本以此类推:
$awk '{if (NR==2||NR==6||NR==10) print }' ./0/T03-test-07.log  >>./sum/1T03-test-07.log  
$awk '{if (NR==2||NR==6||NR==10) print }' ./1/T03-test-07.log  >>./sum/1T03-test-07.log  
$awk '{if (NR==2||NR==6||NR==10) print }' ./2/T03-test-07.log  >>./sum/1T03-test-07.log  
$awk '{if (NR==2||NR==6||NR==10) print }' ./3/T03-test-07.log  >>./sum/1T03-test-07.log  
$awk '{if (NR==3||NR==7||NR==11) print }' ./0/T03-test-07.log  >>./sum/2T03-test-07.log 
$awk '{if (NR==3||NR==7||NR==11) print }' ./1/T03-test-07.log  >>./sum/2T03-test-07.log 
$awk '{if (NR==3||NR==7||NR==11) print }' ./2/T03-test-07.log  >>./sum/2T03-test-07.log 
$awk '{if (NR==3||NR==7||NR==11) print }' ./3/T03-test-07.log  >>./sum/2T03-test-07.log 
。。。。。。。。。。。。。。。。。。。。。。。。。。

再用paste命令将两此统计结果放入一个文件中。
$paste 1T03-test-07.log 2T03-test-07.log >3T03-test-07.log 

整理后文件中的时间如下所示:
Thu Apr 18 15:30:28 CST 2013 Thu Apr 18 15:32:51 CST 2013   
Thu Apr 18 16:00:30 CST 2013 Thu Apr 18 16:06:37 CST 2013   
Thu Apr 18 16:33:39 CST 2013 Thu Apr 18 16:39:29 CST 2013
。。。。。。。。。。。。。。。。。。。。。。。。。。

哈哈,这个格式可是咱们最擅长的了,执行如下命令即可。
$cat  3T03-test-07.log  |awk '{print (substr($10,1,2)*3600+substr($10,4,2)*60+substr($10,7,2))-(substr($4,1,2)*3600+substr($4,4,2)*60+substr($4,7,2))}' |awk '{a=a+$1} END{print a/3}';
$286.667
计算结果为286.667秒。
当然,还会有更好的方法统计执行时间。请多多指教。



如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

0

添加新评论2 条评论

zhendazhenda数据库管理员昆仑银行
2013-04-26 20:57
thuanqin: 学习了,awk果然强大呀~提个请求,楼主能不能有时间发一篇关于测试方法、步骤的博文?
这个主题有点大了。我也是个菜鸟。
thuanqinthuanqin其它ibm
2013-04-25 23:15
学习了,awk果然强大呀~提个请求,楼主能不能有时间发一篇关于测试方法、步骤的博文?
Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广