Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
根据大小将单个大csv文件拆分为多个csv文件,并通过UNIX保留源文件的文件头_Csv_Unix - Fatal编程技术网

根据大小将单个大csv文件拆分为多个csv文件,并通过UNIX保留源文件的文件头

根据大小将单个大csv文件拆分为多个csv文件,并通过UNIX保留源文件的文件头,csv,unix,Csv,Unix,我们得到的是:一个以字段名为标题的单一文件csv文件 我们需要: 根据文件大小,我们需要使用exptension _00*将其拆分为多个较小的csv文件 条件:如果文件大小5 GB,则将其拆分为多个文件,其维度范围在(1 GB到$base.OK”并关闭OK } 这不是一个问题,而是一个规范,就目前情况而言,更适合在众多自由编程网站之一上发布。俗话说,SO不是一个代码编写服务。关于使用awk到Python等工具拆分CSV,有很多问题:如果您使用的是一个,并且有问题,那么你应该编辑你的问题,以便更具

我们得到的是:一个以字段名为标题的单一文件csv文件

我们需要:

  • 根据文件大小,我们需要使用exptension _00*将其拆分为多个较小的csv文件 条件:如果文件大小<5 GB,则不执行任何操作。 如果文件大小>5 GB,则将其拆分为多个文件,其维度范围在(1 GB到<5 GB)之间。 在这里,我们需要注意的是,在按大小拆分文件时,我们不会拆分单个记录

  • 我们需要保留源文件的头记录,并将其复制到每个新文件中

  • 每个小文件都需要创建一个具有相同名称但扩展名为(.ok)的空白文件。这只是为了通知已创建文件

  • 最后删除源文件。只保留新文件。创建一个与源文件同名但扩展名为的最终文件。确定

  • Ex:源文件:文件名\u 20160316.csv大小:8.8 Gb

    输出:

    文件名\u 20160316\u 001.csv(大小:4 GB) 文件名\u 20160316\u 001.ok 文件名\u 20160316\u 002.csv(大小:4.8 GB) 文件名\u 20160316\u 002.ok 文件名\u 20160316.ok

    请帮助我们编写Unix代码

    #/usr/bin/perl-p
    
    #!/usr/bin/perl -p
    
    BEGIN
    {
        $dim = 5e9;
        $header = <>;           # We need to preserve the header record
        exit if -s ARGV < $dim; # If file_size < 5 GB then no action.
        $headsize = $told = tell;
                                # ranges between ( 1 GB to < 5 GB )
        $dim = ($dim+(-s _)/int(1+(-s _)/$dim))/2 if (-s _)%$dim <= 1e9;
        ($base = $ARGV) =~ s/.csv/_/;
        $extent = "000"
    }
    
    if (tell > $lim)            # need new file?
    {
        $lim = $told+$dim-$headsize;
        open OK, ">$base$extent.ok" and close OK if $output;
        $output = $base.++$extent.'.csv';
        open STDOUT, ">$output" or die "$output: $!\n";
        print $header           # replicate into each new file.
    }
    
    $told = tell;
    
    END
    {
        open OK, ">$base$extent.ok" and close OK if $output;
        chop $base;
        unlink $ARGV and open OK, ">$base.ok" and close OK
    }
    
    开始 { $dim=5e9; $header=;#我们需要保留header记录 如果-s ARGV<$dim;#如果文件大小<5 GB,则不执行任何操作,则退出。 $headsize=$tell=tell; #介于(1 GB到<5 GB)之间的范围 $dim=($dim+(-s-)/int(1+(-s-)/$dim))/2如果(-s-)%$dim$lim)需要新文件? { $lim=$TELL+$dim-$headsize; 打开OK,“>$base$extent.OK”,如果$output,则关闭OK; $output=$base.+$extent.'.csv'; 打开STDOUT“>$output”或die“$output:$!\n”; 打印$header#复制到每个新文件中。 } $tell=tell; 结束 { 打开OK,“>$base$extent.OK”,如果$output,则关闭OK; 切掉$base; 取消链接$ARGV并打开OK,“>$base.OK”并关闭OK }
    这不是一个问题,而是一个规范,就目前情况而言,更适合在众多自由编程网站之一上发布。俗话说,SO不是一个代码编写服务。关于使用awk到Python等工具拆分CSV,有很多问题:如果您使用的是一个,并且有问题,那么你应该编辑你的问题,以便更具体地说明你的困难。