Return to Tech/awk

Awk - Summarize Status Codes

Examples - sum_codes.awk
file:awk/sum_codes.awk

#!/usr/bin/awk

BEGIN {
    rcnt = 0;
    sum = 0;
}

{
    if($(NF-1) ~ /[0-9]{3}$/) {
# 通常の例 ステータスコード件数を足しこみます
        codes[$(NF-1)]++;
    } else if($(NF-2) ~ /[0-9]{3}$/) {
# もし上記にあてはまらない場合
        codes[$(NF-2)]++;
    } else {
        codes["NG"]++;
# もしNGのレコードが存在する場合は以下、列数と行全体を確認し
# 抽出対象を調整します。例: $7等直接参照
#               print "NG: NF: ", NF, $0;
    }

# 処理した件数を記録
    rcnt++;
}

END {
# ステータスコード一覧と各件数をレポートします
    for(key in codes) {
        print key, codes[key];
        sum += codes[key];
    }
    print "Processed Count: ", rcnt, " sum: ", sum;
}
$ awk -f awk/sum_codes.awk /var/somelocation/kshell-access_log | sort -nr -k 2
200 4127
404 387
408 370
400 35
206 16
503 15
304 3
204 2
201 2
Processed Count:  4957  sum:  4957

Return to Tech/awk