Apache-2.2
如何在 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 的第 3 列和第 4 列的輸出,而沒有實際指定域,因為我有 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