如何用 Perl 将一个 5000 行的文件拆分为多个每个 200 行的文件?

dub*_*bis 0 perl

我有一个 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 行的文件。

Aru*_*ngh 5

您可以用于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)