in reply to Re^5: Write to multiple files according to multiple regex
in thread Write to multiple files according to multiple regex
the single match that is found is only found if the first block is a match. else everything is empty.
data looks like that:UT 123456789 1234 9876 1234 some additional string information THE_END UT 987654321 1234 2345 some additional string information THE_END UT 1928374756 4321 2567 1234 THE_END some additional string information UT 5647382910 1234 2435 5678 some additional string information THE_END
notice I changed END to THE_END to make it more unique, since other lines may accidentially contain the string "END" and I cant use regex "^END"
the current code is:
#!perl use strict; use warnings; use FindBin; my $dir ="$FindBin::Bin/../rxo"; opendir(my $dh, $dir) || die "can't opendir $dir: $!"; my @inputs = readdir($dh); closedir $dh; splice @inputs, 0, 2; my @dispatch; foreach(@inputs) { my $outfile = "$FindBin::Bin/../blocks/$_"; open my $ofh, '>', $outfile || die; my $file = "$FindBin::Bin/../rxo/$_"; open my $fh, '<', $file || die;; my $regex = <$fh>; close $fh; push @dispatch, { file => $ofh, regex => qr/$regex/ }; } while(my $line = do { local $/ = 'THE_END'; <> }) { foreach (@dispatch) { print { $_->{file} } $line if $line =~ $_->{regex}; } }
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^7: Write to multiple files according to multiple regex
by BillKSmith (Monsignor) on Jul 21, 2015 at 23:19 UTC | |
by Foodeywo (Novice) on Jul 22, 2015 at 10:42 UTC | |
by BillKSmith (Monsignor) on Jul 22, 2015 at 18:02 UTC | |
by Foodeywo (Novice) on Jul 23, 2015 at 10:50 UTC |