实践一
最近需要对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
下面一一分析下上面对命令
awk -F '|' '{print ..}'
: 这个命令可以对一行数据进行格式化拆分,它本身支持非常灵活的内容处理,本身特性还可以进行编程,非常强大,这里只是把一行记录按‘|‘分开后输出第5部分的内容。sort
: 默认按默认排序是按照ASCII进行排序uniq -c
: 表示合并相邻的重复记录,并统计重复数。因为uniq -c 只会合并相邻的记录,所以在使用该命令之前需要先排序sort -k 1 -nr
: 经过uniq -c 处理之后的数据格式形如"2 data",第一个字段是数字,表示重复的记录数;第二个字段为记录的内容。我们将对此内容进行排序。sort -k 1表示对于每行的第一个字段进行排序,这里即指代表重复记录数的那个字段。因为sort命令的默认排序是按照ASCII,这就会导致按从大到小进行排序时,