Beefy Boxes and Bandwidth Generously Provided by pair Networks
"be consistent"
 
PerlMonks  

Re^3: How can I print three lines before pattern match?

by QM (Vicar)
on Aug 14, 2009 at 03:02 UTC ( #788500=note: print w/ replies, xml ) Need Help??


in reply to Re^2: How can I print three lines before pattern match?
in thread How can I print three lines before pattern match?

Is the #file a reference to my data file?

No, not directly. Instead, the idea presented was to capture the whole file in @file:

my @file = <DATA>;

In your case, it would be <INFILE> instead of <DATA>. (<DATA> is a special file handle, starting after the special tag __DATA__ in the script, but otherwise pretty much a normal-behaving file handle.)

The $# in front of an array identifier means "the last index of" that array.

Perhaps better is to keep the last three lines in a fifo:

open(INFILE, "< file.log") or die "Cant open file : $!"; open(OUT, "> results.txt") or die "Cant open new file : $!"; $pattern = "Error code 2"; my @file; while (<INFILE>) { print OUT @file if (/$pattern/ and @file); push @file, $_; # push on the current line shift @file while (@file > 3); # shorten to 3 elements } close INFILE; close OUT;

Don't forget warnings and strict.

-QM
--
Quantum Mechanics: The dreams stuff is made of


Comment on Re^3: How can I print three lines before pattern match?
Select or Download Code

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others cooling their heels in the Monastery: (6)
As of 2014-09-18 05:11 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    How do you remember the number of days in each month?











    Results (108 votes), past polls