最近需要对nginx日志文件进行统计,几十个文件,加起来上千万行的记录,用代码写就有点太那啥了,还占内存,所以决定使用linux命令来实现。
大概需求就是统计访问量top100的请求量,以及这100个请求的平均响应时长。
写出来对命令长这样:
cat nginx.log_2017-10-*.bak | awk -F '|' '{print $5}' | grep '?_' | awk -F '?' '{print $1}'| sort| uniq -c | sort -k 1 -nr | head -20
下面一一分析下上面对命令
某次调优JVM时,分析GC日志,其中使用CMS+UseParNewGC 回收器,产生的日志中要分析平均YGC的时长。
一行YGC日志长这样:
572.219: [GC (Allocation Failure) 572.219: [ParNew: 420082K->700K(471872K), 0.0081741 secs] 498361K->78979K(2044736K), 0.0082966 secs] [Times: user=0.02 sys=0.01, real=0.01 secs]
计算平均时长,我这里用了两条命令,一条求总数,一条求总时长
>> cat gc.log | grep 'Allocation' | awk -F ',' '{print $2}' | wc -l # 总数
200
>> cat gc.log | grep 'Allocation' | awk -F ',' '{print $2}' | awk -F 'secs' '{a+=$1}END{print a}' # 总时长
1.53131
在手动计算了一下平均值。其实也可以一行命令来计算平均值:
>> cat gc.log | grep 'Allocation' | awk -F ',' '{print $2}' | awk -F 'secs' '{a+=$1}END{print a/NR}'
linux命令还是十分强大的,有时候一次性的文件处理,可以优先考虑一下命令处理。

