web-dev-qa-db-ja.com

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

私は50以上のドメインを持っていて、リストを維持したくないので、実際にドメインを指定せずに、bob.comとluke.comの3番目と4番目の列を合計する出力を探しています。印刷物を統合するだけではるかに簡単になります。

1
James

またはこれ:

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

を生成します

bob.com 2361
luke.com 254

サンプルログファイルを使用します。

1
Scrutinizer

この仕事をするための小さなスクリプトを書くことができます:

#!/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
0
cuonglm