アクセスログ解析
たいしたものではないですが、GroovyでApacheのアクセスログを解析するスクリプトを作ったので晒します。
import java.text.* def sdf = new SimpleDateFormat("[dd/MMM/yyyy:HH:mm:ss", Locale.US) def sdf2 = new SimpleDateFormat("yyyy/MM/dd HH:00-HH:59") def count = [:] new File('access_log').eachLine { if( it =~ /.do/ ) { def record = it.split(' ') def d = sdf.parse(record[3]) def key = sdf2.format(d) if(count[key]) { count[key] = count[key] + 1 } else { count[key] = 1 } } } count.each{ k,v -> println "[$k] ${v.toString().padLeft(6,' ')}" }
アクセスログから".do"を含む行を抜き出して、1時間ごとに集計します。ちょっと冗長なところもありますが、可読性重視ということで。。。
出力結果はこんな感じ。
[2009/02/23 06:00-06:59] 43 [2009/02/23 07:00-07:59] 201 [2009/02/23 08:00-08:59] 1297
String.padLeft()で右詰めしているのがGroovyならでは。Javaだと一筋縄でいかないとこです。
あと、SimpleDateFormatでLocale.USを指定しているのは、月の表記が"Feb"とかになっているのを正しく扱うためです。日本語環境だと、フォーマット文字列をMMMにしても数字表記のままで、MMMMにすると"2月"のように漢字表記になっちゃいます。