最近在做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秒。
当然,还会有更好的方法统计执行时间。请多多指教。
添加新评论2 条评论
2013-04-26 20:57
2013-04-25 23:15