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

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

我的 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

相关内容