如何在Apache中使用AWK生成带宽报告

我有我的Apache日志设置像这样:

LogFormat "%v %t %I %O" billing 

我怎样才能使用AWK生成一个报告,显示每个虚拟主机的总带宽(接收+发送),以MB为单位?

以下是一个日志输出示例:

 bob.com [3 JULY 2013] 903 299 bob.com [8 JULY 2013] 192 138 luke.com [12 JULY 2013] 34 123 bob.com [19 JULY 2013] 616 213 luke.com [22 JULY 2013] 23 74 

我正在寻找一个输出,为bob.com和luke.com总结第三和第四列,而没有真正指定域名,因为我有50多个域名,不想维护一个列表。 打印出来更加容易。

或这个:

 awk '{T[$1]+=$NF+$(NF-1)} END{for(i in T) print i,T[i]}' file 

会产生

 bob.com 2361 luke.com 254 

与您的示例日志文件..

你可以写一个小脚本来完成这个工作:

 #!/bin/bash log_file="/path/to/logfile" domains=`awk '{print $1}' $log_file | sort | uniq` for domain in $domains do sum=$(grep "$domain" $log_file | \ awk '{ for (i = 5; i <= NF; i++) s = s+$i }; END { print s+0 }') echo "Total bandwidth of $domain is $sum" done