我的Unix系统中有多个块文件。可以说(file1.csv,file2.csv ...,file10.csv)。我想以相同的顺序附加所有这些文件,而不是逐行读取它们。
open(my $fh, '<:encoding(UTF-8)', $filename)
or die "Could not open file '$filename' $!";
while (my $row = <$fh>) {
chomp $row;
print "$row\n";
}
上面的示例代码逐行读取文件。但是我拥有的块文件有大量数据。因此,我无法逐行读取它们,也无法使用Stringify()
将其存储在字符串中。
我正在Perl中寻找类似于下面的shell命令的内容。
cat file1.csv >> file.csv
请让我知道我可以在Perl中进行类似的复制(附加在目标文件的末尾)。谢谢!
答案 0 :(得分:2)
如上所述,Shawn可以一次read
个块。您可以尝试不同的块大小,以查看系统上最快的块。例如:
my $BLOCK_SIZE = 1024 * 1024 * 2; # try reading 2 megabytes at a time
my $outfile = "output.csv";
open(OUT, ">>", $outfile) or die "Can't append to output file $outfile: $!\n";
foreach my $input_file (@input_files) {
open(IN, "<", $input_file) or die "Can't read from input file $input_file: $!\n";
my $data;
my $blocks_read = 0;
while (read(IN, $data, $BLOCK_SIZE)) {
print OUT $data;
$blocks_read++;
}
close IN;
print "Read $blocks_read blocks from $input_file\n";
}
close OUT;
}