如何在unix命令行中拆分大型csv文件

时间:2013-10-28 19:57:20

标签: unix awk printf

我只是将一个非常大的csv文件拆分为部分。什么时候我运行以下命令。不完全拆分而是返回以下错误。我怎样才能避免拆分整个文件。

       awk -F, '{print > $2}' test1.csv 

       awk: YY1 makes too many open files
       input record number 31608, file test1.csv
       source line number 1

2 个答案:

答案 0 :(得分:17)

写完后只需close个文件:

awk -F, '{print > $2; close($2)}' test1.csv

答案 1 :(得分:0)

你必须有很多行。您确定第二行重复足以将这些记录放入单个文件中吗?无论如何,awk将文件保持打开直到结束。您需要一个可以在不使用时关闭文件句柄的进程。

Perl救援。试。

#!perl    
while( <> ) {
    @content = split /,/, $_;
    open ( OUT, ">> $content[1]") or die "whoops: $!";
    print OUT $_;
    close OUT;
}

用法:script.pl your_monster_file.csv

将整行输出到一个名称与当前目录中第二个CSV列的值相同的文件中,假定没有带引号的字段等。