require 'csv' # read: ar = CSV.table("test.csv").to_a #table method assumes headers and converts numbers if possible. # manipulate: ar.first << "SUM" ar[1..-1].each{|row| row << row.sum} # write: CSV.open("out.csv", 'w') do |csv| ar.each{|line| csv << line} end