利用 awk 统计请求文件的大小,计算流量

需求

有时候,我们希望统计以下nginx日志文件中的请求文件大小,相加后进行计算,听起来有些不可思议,但是利用 awk 却变得非常简单。

步骤

首先,我们过滤下日志,比如过滤某天20:30-20:35之间的日志,我们的日志格式如下

115.205.71.215 - - [30/Dec/2016:15:44:50 +0800] "GET /phpmyadmin/phpmyadmin.css.php?nocache=4411476529ltr HTTP/2.0" 200 21672 "https://awen.me/phpmyadmin/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/55.0.2883.87 Safari/537.36"

我们现在先提取20:30-35之间的日志

grep -E 20:3[0-5]:[00-59] access.log >> log.log

然后

cat log.log | awk '{sum+=$9}END{sum}'

$9 是指日志文件的第九行 21672

[root@CTN-QD-247 wwwlogs]# cat awen.me-2017-02-23-access.log
43.230.89.164 - - [23/Feb/2017:12:16:32 +0800] "GET / HTTP/1.1" 200 13091 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36"
43.230.89.163 - - [23/Feb/2017:12:16:33 +0800] "GET / HTTP/1.1" 200 13091 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36"
43.230.89.163 - - [23/Feb/2017:12:16:37 +0800] "GET / HTTP/1.1" 200 13091 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36"
[root@CTN-QD-247 wwwlogs]# awk '{sum+=$10}END{print sum}' awen.me-2017-02-23-access.log
39273