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

如何在unix命令行中拆分大型csv文件,unix,awk,printf,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 你一定有很多台词。您确定第二行的重复次数足以将这些记录

我只是把一个非常大的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

你一定有很多台词。您确定第二行的重复次数足以将这些记录放入单个文件中吗?不管怎么说,awk将文件一直保持打开状态,直到结束。您需要一个在不使用时可以关闭文件句柄的进程

我来营救你。再说一遍

#!perl    
while( <> ) {
    @content = split /,/, $_;
    open ( OUT, ">> $content[1]") or die "whoops: $!";
    print OUT $_;
    close OUT;
}
#!perl
而(){
@content=split/,/,$;
打开(OUT,“>>$content[1]”)或死“哎呀:$!”;
打印出美元;
收尾;
}
用法:
script.pl您的怪物文件.csv


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

只需
在写入后关闭文件:

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

非常感谢您的回复,我正在使用文件中的第二列。我将尝试您的perl脚本。我刚刚注意到,我错过了open命令中的“>>”。只有最后一行没有这个,有很多文件?我只是在处理一个包含1000万条记录的10GB文件并试图将其拆分为1000个文件(每个文件包含10000条记录)时遇到了这个错误!当它打开16个文件时,awk放弃了:-)
awk-F,“{print>>$2;close($2)}”test1.csv
,除非你只需要一行