【发布时间】:2018-12-10 10:33:06
【问题描述】:
我正在寻找连接数千个文件的最有效方法。到目前为止,我的做法(使用 Perl)是:我将打开源路径和目标路径,并将每一行插入目标文件。
当然,这将需要很多时间。我想使用 Linux 命令cat 来解决这个问题。但是从过去的线程中,我了解到 cat 有 MAX_ARG 将限制设置为命令行。
考虑您有一个数组@paths,其中包含所有要连接的路径。使用 Perl 将数千个文件连接到一个主文件(顺序无关紧要)的最有效方法是什么?
编辑:如果这很重要,连接文件可以达到3GB。
【问题讨论】:
-
以固定大小的块而不是逐行读取和写入内容。 $/ = \1024*1024*8;
-
看看 shelll 命令
xargs。也许这可以解决您的cat命令文件过多的问题。 -
请向我们展示您已有的代码。很可能应该是
use Path::Tiny; open my $out, '>', $outfilename or die "Couldn't write to '$outfilename': $!"; for my $in (@inputfiles) { print $out path($in)->slurp } -
数据块而不是行,使用
sysread和syswrite。或者可能使用File::Map来读取文件。 -
请允许我们为您谷歌:concatenate files using perl