我的 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 的第 3 列和第 4 列,而无需实际指定域,因为我有 50 多个域,并且不想维护列表。只需将打印输出合并就容易多了。
答案1
或这个:
awk '{T[$1]+=$NF+$(NF-1)} END{for(i in T) print i,T[i]}' file
会产生
bob.com 2361
luke.com 254
使用您的示例日志文件..
答案2
您可以编写一个小脚本来完成这项工作:
#!/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