Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer
 
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 making s'mores by the fire in the courtyard of the Monastery: (6)
As of 2015-07-05 18:23 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (67 votes), past polls