CSV只是一个文本文件;它由一长串大的文本字符组成,因此没有随机访问列。理想情况下,您可以将CSV放入数据库,然后可以直接执行此操作。
但是,除此之外,我相信你可以用Perl做一点聪明。我的方法是这样的:
my @filehandles;
my $line = 0;
while (my $row = $csv->getline ($fh))
{
#open an output file for each column!
if (not defined $filehandles[0])
{
for (0..$#$row)
{
local $handle;
open $handle, ">column_$_.txt" or die "Oops!";
push @filehandles, $handle;
}
}
#print each column to its respective output file.
for (0..$#$row)
{
print $filehandles[$_] $row->[$_] . ",";
}
#This is going to take a LONG time, so show some sign of life.
print '.' if (($line++ % 1000) == 0);
}最后,每列将在其自己的文本文件中作为一行打印。不要忘记关闭所有文件,然后再次打开它们进行读取,然后一次将它们写入一个输出文件中。我的猜测是,这将是缓慢的,但足够快,可以做数百万行,只要你不必经常这样做。它不会面临内存限制。