in reply to Match a list of numbers from a list of files
Firstly, you can read entire an entire transaction by setting the input record separator ($/, see perlvar). Second, you can use a regular expression with alternation to see if a transaction contains any of the numbers in one fell swoop.
use strict; use warnings; open my $numberFH, q{<}, \ <<EOD or die qq{open: $!\n}; 123456789 567898760 154216722 763498126 EOD chomp( my @numbers = <$numberFH> ); close $numberFH or die qq{close: $!\n}; my $rxFindTrans = do{ local $" = q{|}; qr{(@numbers)}; }; open my $transFH, q{<}, \ <<EOD or die qq{open: $!\n}; some rubbish lines <BEGIN Transaction> blurfl 154876543 <END Transaction> more rubbish <BEGIN Transaction> the one we want 154216722 with more stuff <END Transaction> <BEGIN Transaction> blargh 54211548 <END Transaction> EOD { local $/ = qq{<END Transaction>\n}; while( <$transFH> ) { s{.*(?=<BEGIN Transaction>)}{}s; next unless m{$rxFindTrans}; print qq{Found $1 in:\n$_}; print qq{==================\n}; } } close $transFH or die qq{close: $!\n};
The output.
Found 154216722 in: <BEGIN Transaction> the one we want 154216722 with more stuff <END Transaction> ==================
I hope this is helpful.
Cheers,
JohnGG
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Match a list of numbers from a list of files
by shawshankred (Sexton) on Dec 18, 2008 at 00:49 UTC | |
|
Re^2: Match a list of numbers from a list of files
by shawshankred (Sexton) on Dec 18, 2008 at 20:36 UTC | |
by johngg (Canon) on Dec 19, 2008 at 10:09 UTC | |
by shawshankred (Sexton) on Dec 19, 2008 at 18:59 UTC |