require 'fastercsv' h = Hash.new linen = 0 dategroup = Date.new #.select{ |l| l =~ /[a-zA-Z0-9]+/ } `git log --pretty=format:%aD --shortstat | grep [a-zA-Z0-9]`.each { |line| if line =~ /\d\d:\d\d:\d\d/ then date = Date.parse(line) dategroup = Date.new(date.year, date.month, 1) if h[dategroup] then h[dategroup][:commits] += 1 else h[dategroup] = Hash.new h[dategroup][:commits] = 1 end else line =~ /([\d]+) files changed, ([\d]+) insertions\(\+\), ([\d]+) deletions\(-\)/ h[dategroup][:insert] = (h[dategroup][:insert])? h[dategroup][:insert].to_i + $2.to_i : $2.to_i h[dategroup][:delete] = (h[dategroup][:delete])? h[dategroup][:delete].to_i + $3.to_i : $3.to_i end } FasterCSV.open("/tmp/count.csv", "w") do |csv| h.sort.each { |date, value| csv << [ "#{date.month}/1/#{date.year}", value[:commits], value[:insert] + value[:delete] ] } end