Beefy Boxes and Bandwidth Generously Provided by pair Networks
XP is just a number
 
PerlMonks  

Re^7: Extract lines between two patterns

by mnithink (Initiate)
on Jan 24, 2012 at 03:27 UTC ( #949565=note: print w/ replies, xml ) Need Help??


in reply to Re^6: Extract lines between two patterns
in thread Extract lines between two patterns

Thanks to all of you for your help. Based on your guidance i managed to get my code work. I'm posting my code below. #!/usr/bin/perl #use strict; #use warnings; my $fh; my $log; my $line; open($fh,"<","file1") or die "can not open file $fh : $!\n" ; open ($log,">","file2")or die "can not open file $log : $!\n" ; while($line = <$fh>) { if ($line =~ /pattern1/ ) { printf $log $line; while($line = <$fh>) { if($line =~ /pattern2/) { printf $log $line; last; } else { printf $log $line; } } } } close $fh; close $log; Happy to take your advice to make this code more efficient.


Comment on Re^7: Extract lines between two patterns
Re^8: Extract lines between two patterns
by Anonymous Monk on Oct 11, 2012 at 17:02 UTC
    Hi If you want to make this more general like you don't know what point you are using and need to use flags how do you do that?
      What are you asking?
        pretty much I want to use flags in a loop and tell the program once you reach lets say C print it and then the line after that until point G I had was not automated and what I need is to automate it. I will let you see the code its my first time ever to use perl so it might look bad but what ever.
        #!/\\perl # use strict; use warnings; use CQPerlExt; use Getopt::Long; use Time::Local; use File::Basename; # Put the file name in a string variable # so we can use it both to open the file # and to refer to in an error message # if needed. my( $dataLine ); my( $fileName ); my( $success ); # Hard-code the name of the file we're going to read. # This is the script itself. $fileName = '/\\rat09awp\ccscripts\Islam\test.log'; my $start = 0; # Attempt to open the file. We create a file handle called "IN". # Open returns a true value if it succeeded, an undefined # value if it didn't succeed. $success = open( IN, "<$fileName" ); if ( $success ) { # We opened the file successfully. # We loop until we don't get any more data from the file. Wh +en the # file has been exhausted, the value of $dataLine is set to +undefined. # So we simply test $dataLine to see if it is defined after +we have # obtained another line from the file. while ( defined( $dataLine = <IN> ) ) { # while (<IN>) { # print $_; # if ($_ =~ /Duplicate remedy_id:/) { if ($dataLine =~ /Duplicate remedy_id:/ ) { printf $dataLine; while($dataLine = <IN>) { if($dataLine =~ /Duplicate ip_address:/) { printf $dataLine; last; } else { printf $dataLine; } } } } # We have read all the lines from the file. # Close the file. close( IN ); } else { # Opening failed. The error message is stored in a special P +erl # variable, $!. The die() function prints an error message, +then # causes Perl to quit. die( "Can't open file '$fileName' for reading: $!.\n" ); }
        Thanks

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://949565]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others scrutinizing the Monastery: (12)
As of 2014-12-26 09:01 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    Is guessing a good strategy for surviving in the IT business?





    Results (169 votes), past polls