【问题标题】:how to split a large csv file in unix command line如何在 unix 命令行中拆分大型 csv 文件
【发布时间】:2013-10-28 19:57:20
【问题描述】:

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

【问题讨论】:

    标签: unix awk printf


    【解决方案1】:

    close写完后的文件:

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

    【讨论】:

    • awk -F, '{print >> $2; close($2)}' test1.csv 除非你只需要一行
    【解决方案2】:

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

    Perl 来拯救。再次。

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

    用法:script.pl your_monster_file.csv

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

    【讨论】:

    • 非常感谢您的回复,我正在使用文件中的第二列。我会试试你的 perl 脚本
    • 刚刚注意到我错过了打开命令上的“>>”。没有那个只会得到最后一行。
    • “很多”文件?我在处理包含 1000 万条记录的 10GB 文件并尝试将其拆分为 1000 个文件,每个文件包含 10,000 条记录时遇到了这个错误! awk 在打开 16 个文件时放弃了 :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-04
    相关资源
    最近更新 更多