in reply to printing several lines around match

auto_w:

Just keep track of the last few lines while you're processing, so you'll have them handy when you hit your match:

#!/usr/bin/perl use strict; use warnings; my @last_few_lines; while (<DATA>) { push @last_few_lines, $_; shift @last_few_lines if @last_few_lines>3; + } print $_ for @last_few_lines; __DATA__ Adam Ant Bananarama Cyndi Lauper Devo Enema M Frank Zappa George Strait Hanna Banana

...roboticus

When your only tool is a hammer, all problems look like your thumb.

Replies are listed 'Best First'.
Re^2: printing several lines around match
by auto_w (Novice) on Jun 19, 2012 at 13:20 UTC
    Very good, works fine -the only problem it doesn't print the lines before match,only after

      auto_w:

      Sure it can. When you find the match you've the previous few lines, and can print them. The technique is just to show you how to keep track of the last few lines, in case you need to save some history.

      Update: When I first read your post, I thought you wanted the code to predict the future!

      ...roboticus

      When your only tool is a hammer, all problems look like your thumb.

      Untested, but I think it should get you on the right track.

      #!/usr/bin/perl -w use strict; use warnings; my $m_1 = "Receive message"; @ARGV == 2 || die "usage: $0 TAB_1 TAB_5\n"; my ( $TAB_11, $TAB_35 ) = @ARGV; my @files = <./*.log>; # Fixed inconsistent indentation. foreach my $file (@files) { print $file . "\n"; my @last_few_lines; my $how_many_lines = 3; my $matched = 0; open (my $HAN, $file) || die "Cannot open '$log' because: $!"; while ( (not $matched) && <$HAN> ) { # As per roboticus, slightly altered though: push @last_few_lines, $_; shift @last_few_lines if @last_few_lines > $how_many_lines; if ( m/$TAB_11|$TAB_35/ && m/$m_1/) { print @last_few_lines, $&; # Note that $& will contain the matched results from the # m/$m_1/ match, in your and my designs both. $matched = 1; } if ($matched) { $matched = 0; for (1..$how_many_lines) { print <$HAN>; last if eof $HAN; } } } }
        Use of uninitialized value $_ in pattern match (m//) at ./perl4line.pl line 25, <$HAN> line 109. Use of uninitialized value $_ in pattern match (m//) at ./perl4line.pl line 25, <$HAN> line 110. Use of uninitialized value $_ in pattern match (m//) at ./perl4line.pl line 25, <$HAN> line 111. Use of uninitialized value $_ in pattern match (m//) at ./perl4line.pl line 25, <$HAN> line 112. Use of uninitialized value $_ in pattern match (m//) at ./perl4line.pl line 25, <$HAN> line 113. Use of uninitialized value $_ in pattern match (m//) at ./perl4line.pl line 25, <$HAN> line 114. Use of uninitialized value $_ in pattern match (m//) at ./perl4line.pl line 25, <$HAN> line 115. Use of uninitialized value $_ in pattern match (m//) at ./perl4line.pl line 25, <$HAN> line 116. Use of uninitialized value $_ in pattern match (m//) at ./perl4line.pl line 25, <$HAN> line 117. Use of uninitialized value $_ in pattern match (m//) at ./perl4line.pl line 25, <$HAN> line 118. Use of uninitialized value $_ in pattern match (m//) at ./perl4line.pl line 25, <$HAN> line 119. Use of uninitialized value $_ in pattern match (m//) at ./perl4line.pl line 25, <$HAN> line 120. Use of uninitialized value $_ in pattern match (m//) at ./perl4line.pl line 25, <$HAN> line 121. Use of uninitialized value $_ in pattern match (m//) at ./perl4line.pl line 25, <$HAN> line 122. Use of uninitialized value $_ in pattern match (m//) at ./perl4line.pl line 25, <$HAN> line 123.