300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > linux 统计日志数量总 shell统计日志中时间段内匹配的数量的方法

linux 统计日志数量总 shell统计日志中时间段内匹配的数量的方法

时间:2018-09-13 19:36:00

相关推荐

linux 统计日志数量总 shell统计日志中时间段内匹配的数量的方法

shell统计日志中时间段内匹配的数量的方法,有需要的朋友可以参考下。

假设日志文件mtasvr.log格式如下:

T:24583088(04:02:06)[root:Info] 6KqowLDLAgC93DFIKrENAA==.41S2:from=,to=, queued

T:122428336(13:36:51)[root:Info] 6KqowLAbAAByYzJIZGsOAA==.2W:from=,to=, queued

要求统计从14:27:20到15:26:41之间包含queued的数量。

最初,用grep匹配queued,然后用awk取出()中间的时间,最后用wc来统计行数,得到下面这条语句:

复制代码 代码如下:

cat mtasvr.log |grep queued |awk -F\( '{print $2}' |awk -F\) '{if ($1>="14:27:20" && $1<="15:26:41") {print $1}}' |wc -l

接下来,觉得两次awk取出括号()中的时间比较繁琐。决定用sed替换掉括号再统计,会比较好看:

复制代码 代码如下:

cat mtasvr.log |grep 'queued' |sed "s/[()]/;/g" |awk -F\; '{if ($2>="14:27:20" && $2<="15:26:41") {print}}' |wc -l

然后,想法应该去掉cat和grep。cat本身就没必要,grep的匹配也可以直接用sed来完成:

复制代码 代码如下:

sed "/queued/s/[()]/;/g" mtasvr.log |awk -F\; '{if ($2>="14:27:20" && $2<="15:26:41") {print}}' |wc -l

最后,把wc统计行数也去掉,只用sed和awk来完成这个任务:

复制代码 代码如下:

sed "/queued/s/[()]/;/g" mtasvr.log |awk -F\; '{if($2>="14:27:20" && $2<="15:26:41") m++} END{print m}'

总结:

sed和awk很强大,当然有些简化也没必要。

比如wc就能很好的完成统计行数的任务,没必要再去想awk怎么来实现。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。