defparse_line(line) returnnilif line.nil? line.match(@@line_regex) end
defparse_log_to_csv(src_file, dst_file) if src_file.nil? or dst_file.nil? puts "please entry the right src_file and dst_file" returnfalse end
if !File.readable?(src_file) puts "src_file[#{src_file}] is not readable" returnfalse end
if !File.writable?(File.dirname(dst_file)) puts "dst_file[#{dst_file}] is not writable" returnfalse end
# output fields name to dst_file CSV.open(dst_file, "w") do |data| first_line = File.open(src_file, "r") {|f| f.readline} puts "first_line of file[#{src_file}] is #{first_line}" parts = self.parse_line(first_line) data << parts.names end
# parse the log file and store to dest csv file CSV.open(dst_file, "a+") do |data| File.open(src_file, "r").each do |line| parts = parse_line(line) if parts == nil puts "Error -- Can't parse line [#{line}]" next end line_csv_array=[] parts.names.each { |filed_name| line_csv_array.push(parts[filed_name]) } # puts line_csv_array.inspect data << line_csv_array end end end end
# Parse the command line src_access_log="" dest_csv_file=""