使⽤awk命令筛选⽇志⽂件中执⾏时间超过200ms的SQL⽇志信息 以后再⾯试的时候,如果有⾯试官再问我这个问题:“请说⼀下你常⽤的linux命令”,那么awk就可以作为答案之⼀了。
⽇志中要筛选的具体⽇志信息如下,其中包含了mapper以及SQL执⾏的时间 2019-12-20 15:05:14.133 ******** [http-nio-8080-exec-64] INFO com.simple.page.MyBatisSqlCostInterceptor.intercept[46] - []The SQL request method is : [dule.infopanel.SimStatQuery],execute the SQL cost 457 ms
现在就是要把⽇志所有执⾏时间超过200ms的筛选出来。
具体的脚本如下:
cat service.log | awk '/execute the SQL cost ([0-9]+) ms/' | awk '{costms=gensub(/.+execute the SQL cost ([0-9]*) ms/,"\\1",1);if(costms+0 > 200) print NR, $ 0}' >> out.log
简单解释⼀下:
cat service.log读取⽇志⽂件,使⽤管道命令把读取的内容作为awk的输⼊, '/execute the SQL cost ([0-9]+) ms/'正则,⽬的是筛选包含SQL执⾏时间的⽇志,
msinfo
gensub(/.+execute the SQL cost ([0-9]*) ms/,"\\1",1)awk的gensub函数,"\\1"是正则匹配的第⼀个括号内的内容。
print NR, $0打印⾏号和当前⾏。