I have commented some lines in your program and added some others as follows:
#!/usr/bin/env perl
use strict;
use warnings;
use Data::Dumper ;
my $source = shift ;
my $lines_per_file = shift ;
open (my $FH, "<$source") or die "Could not open source file. $!";
# open (my $OUT, '>', '00000000.log') or die "Could not open destinati
+on file. $!";
my $OUT = undef;
my $i = 0;
#my $index_last = 0 ;
my $index_current = -1;
while(my $line = <$FH>) {
next unless ($line =~ /mrule/) ;
if ($line =~ /mrule=([0-9]+)/){
if( $index_current != $1 ){
$index_current = $1;
if( defined($OUT) ){ close($OUT); }
my $NEW = sprintf("%08d", $index_current);
open($OUT, ">${NEW}.log") or die "Could not open destinati
+on file. $! " ;
}
print $OUT $line;
$i++ ;
# if ($1 != $index_last){
# $index_current = $1 ;
# close($OUT);
# my $NEW = sprintf("%08d", $index_current);
# open($OUT, ">${NEW}.log") or die "Could not open destinat
+ion file. $! " ;
# }
# $index_last = $index_current ;
}
}
close($FH);
#close($OUT);
if( defined($OUT) ){ close($OUT); }
The above will be looking for an mrule=[0-9]+ pattern in the input. Once it finds one, it will check if the current index is the same as the one in the line and if not, it will close current filehandle and open another one with the new name. After that, it will print to the filehandle currently opened.
Note that no filehandle is opened unless the pattern in the input appears.
tested with the minimal file you had provided.
bliako
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.
|