Status-Codes aus Logfile parsen

Es kann interessant sein, die von einem Webserver ausgelieferten HTTP-Status-Codes zu analysieren. Diese werden im Access-Log des Webservers abgelegt. Hier ein Versuch.

 wc -l 2007-02-access.log 
103509 2007-02-access.log

Das Logfile hat also etwas mehr als 100’000 Zeilen.

 /usr/bin/time awk '{print $10}' < 2007-02-access.log 
| egrep '200|204|206|301|302|304|403|404|503'
| sort -nr
| uniq -c
| sort -nr

Anmerkung: Abhängig vom LogFormat liegen die Status-Codes in einer andern Spalte, “$10” gibt diese an. Falls mal etwas anderes in der jeweiligen Spalte zu liegen kommen sollte, macht es Sinn, die interessanten Status-Codes zu “egrep‘”en.

Das gibt mir etwa folgenden Output:

        0.66 real
78261 200
11616 304
9278 301
3580 404
481 302
168 206
32 204
17 503

Ausführungszeit ist 2/3 Sekunde, was doch ziemlich hoch ist. Hat jemand eine schnellere Version?