RailsのログからIPアドレス、時間帯毎のアクセス数を集計するスクリプト

#!/usr/bin/env ruby

require "enumerator"

result = ARGF.enum_for(:each_line).inject({}) do |result, line|
  if line =~ /(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}) at (\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/
    ip,y,m,d,h,i,s = $1,$2,$3,$4,$5,$6,$7
    h = h.to_i
    result[ip] ||= {}
    result[ip][h] ||= 0
    result[ip][h] += 1
  end
  result
end

result.keys.sort.each do |ip|
  (0..23).each do |h|
    puts "%s\t%2d\t%d" % [ip, h, result[ip][h]]
  end
end

必要に迫られて作ったついでに公開。enumerator便利。
こういうのって公開してもプラグイン化しないと使ってもらえないよな。