免责声明:我不是一个程序员,从来没有,从来没有学习过算法,CS等。只需要和它一起工作。
我的问题是:我需要将一个巨大(超过4 GB)的csv文件拆分为较小的文件(然后用
require 'win32ole'
)基于第一个字段。在awk中,这相当容易:
awk -F ',' '{myfile=$1 ; print $0 >> (myfile".csv")}' KNAGYFILE.csv
但与
ruby
我做到了:
open('hugefile').each { |hline|
accno = hline[0,12]
nline = hline[13,10000].gsub(/;/,",")
accfile = File.open("#{accno.to_s}.csv", "a")
accfile.puts nline
accfile.close
}
然后认识到它的资源效率低下(几个文件打开/关闭)。我肯定有更好的方法,你能解释一下怎么做吗?
更新:
忘了提一下,文件是按第一列排序的。例如,如果这是巨大的:
012345678901,1,1,1,1,1,1
012345678901,1,2,1,1,1,1
012345678901,1,1,A,1,1,1
012345678901,1,1,1,1,A,A
A12345678901,1,1,1,1,1,1
A12345678901,1,1,1,1,1,1
A12345678901,1,1,1,1,1,1
A12345678901,1,1,1,1,1,1
然后我需要两个新文件,名为
012345678901.csv
和
A12345678901.csv
.