#!/usr/local/bin/ruby if ARGV.size < 1 then puts "Usage: #{__FILE__} target_log [THRESHOLD = 100000]" exit end THRESHOLD = ARGV[1] ? ARGV[1].to_i : 100000 data = [] open(ARGV[0]).each{|line| if !(values = line.split(/\s+/)) then next end data << values[1..-1].collect{|value| value.to_i} } # •Ï‰»“_‚Ì’Tõ data_sets = [] temp_set = [] temp_set << (previous_item = data[0]) data[1..-1].each{|item| temp_set << item diffs = [] item.each_with_index{|value, i| diffs << value - previous_item[i] } diffs.each{|diff| if THRESHOLD < diff.abs then temp_set << item data_sets << temp_set temp_set = [] break end } previous_item = item } puts "THRESHOLD\t#{THRESHOLD}" data_sets.each{|data_set| if data_set.size < 10 then next end print "#{data_set.size}" sums = [] sum2s = [] (data_set.first.size - 1).times{|i| sums << 0 sum2s << 0 } data_set.each{|item| item[1..-1].each_with_index{|value, i| sums[i] += value sum2s[i] += value ** 2 } } mus = [] sums.each{|sum| mus << sum.to_f / data_set.size } sigmas = [] sum2s.each_with_index{|sum2, i| sigmas << Math::sqrt((sum2.to_f - sums[i] * 2 * mus[i]) / data_set.size + (mus[i] ** 2)) } mus.size.times{|i| print "\t#{mus[i]}\t#{sigmas[i]}" } puts }