require 'csv' infile = ARGV[0] slice = ARGV[1] || 100 origin = CSV.open infile all_lines = origin.readlines header = all_lines.first all_lines.delete_at(0) all_lines.each_slice(slice).each_with_index do |lines, idx| CSV.open("splitted_#{idx}.csv", 'w') do |csv| csv << header lines.each do |line| csv << line end end end # $ ruby splitter.rb file.csv 50