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便利。
こういうのって公開してもプラグイン化しないと使ってもらえないよな。