要合并大型未分类文件中的行而不耗尽Perl中的内存,可以使用以下方法:
while
循环逐行读取文件。push
将每一行添加到一个数组中。以下是一个示例代码:
#!/usr/bin/perl
use strict;
use warnings;
my $input_file = "large_file.txt";
my $temp_file = "temp_file.txt";
my $output_file = "output_file.txt";
my @data;
my $count = 0;
open(my $input_fh, "<", $input_file) or die "Can't open $input_file: $!";
open(my $temp_fh, ">", $temp_file) or die "Can't open $temp_file: $!";
while (my $line = <$input_fh>) {
chomp $line;
push @data, $line;
$count++;
if ($count == 1000) {
foreach my $row (@data) {
print $temp_fh "$row\n";
}
@data = ();
$count = 0;
}
}
close($input_fh);
close($temp_fh);
if ($count > 0) {
foreach my $row (@data) {
print $temp_fh "$row\n";
}
}
open(my $output_fh, ">>", $output_file) or die "Can't open $output_file: $!";
open(my $temp_fh, "<", $temp_file) or die "Can't open $temp_file: $!";
while (my $line = <$temp_fh>) {
print $output_fh $line;
}
close($output_fh);
close($temp_fh);
unlink($temp_file);
这个代码将读取large_file.txt
文件,逐行将数据存储到数组中,当数组中有1000行时,将数据写入临时文件temp_file.txt
中。最后,将临时文件中的数据合并到最终输出文件output_file.txt
中。这样可以避免在处理大型文件时耗尽Perl的内存。
领取专属 10元无门槛券
手把手带您无忧上云