The problem is you have data on two lines but you are reading the file in a line at a time. You need to remember your state if you want to do it linewise. There are other ways to do it, possibly with split or by setting $/. Here is an example:
while(<DATA>){ chomp; if ( m/^ERROR/ ) { $error = 1; push @errors, $_; } else { next unless $error; $error = 0; if ( m/ORA\-00001/ ) { pop @errors; # ignore values and pop off @errors stack; } else { $errors[-1] .= " $_"; # add error string to line msg } } } print "$_\n" for @errors; __DATA__ ERROR at line 2: ORA-00002: blah2 junk line junk line junk line ERROR at line 1: ORA-00001: unique constraint (TBUSOP_1UQ) violated junk line junk line junk line ERROR at line 3: ORA-00003: blah3
cheers
tachyon
In reply to Re: greping DB ERROR
by tachyon
in thread greping DB ERROR
by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |