我有一个 5000 行的文件,我想要几个每个 200 行的文件,我尝试了以下方法:
#!/usr/bin/perl
use strict;
use warnings;
my $targetfile = '200_lines.txt';
my $filename = '5000_lines.txt';
open ( my $DATA, '<', $filename ) or die "Could not open file '$filename': $!";
while ( my $line = <$DATA> ) {
my $counter++;
open (my $FILE, '>>', $targetfile ) or die "Could not open file '$targetfile': $!";
print $FILE $line;
close $FILE;
if ( $counter % 200 == 0
if ($. % 200 == 0) {
$targetfile =~ s/200/$counter/;
}
}
Run Code Online (Sandbox Code Playgroud)
我的$counter变量仍然为 1。我不知道为什么。所以我只得到一个名为200_lines.txt5000 行的文件。
您可以用于sprintf每 200 行后生成新文件名,并用于$.跟踪文件中的行号。
下面的脚本将从较大的文件生成较小的文件块,每个文件有 200 行。
#!/usr/bin/perl
use strict;
use warnings;
open my $rfh,'<','file_5000' or die "unable to open file : $! \n";
my $filecount=0;
my $wfh;
while(<$rfh>){
if(($.-1) % 200 == 0){
close($wfh) if($wfh);
open($wfh, '>', sprintf("file%02d", ++$filecount)) or die $!;
}
print $wfh "$_";
}
close($rfh);
Run Code Online (Sandbox Code Playgroud)