#!perl
use strict;
use Time::Piece;
my @CommonLogFiles = qw( log1.txt log2.txt);
my $re = qr[TIMESTAMP=... (... +\d{1,2} \d\d:\d\d:\d\d 20\d\d)];
my @records = ();
for my $log (@CommonLogFiles) {
open LOG, '<', $log or die "Could not open $log: $!\n";
print "Just opened $log...\n";
my $record;
my $datetime;
while (<LOG>){
# start of record
if (/^<\d+>/){
$record = "[$log] ".$_;
next;
} else {
$record .= $_;
}
# extract datetime
if (/$re/){
$datetime = Time::Piece->strptime($1,'%b %d %T %Y')->datetime;
#print "$1 => $datetime\n"
}
# save record with datetime
if (/END OF REPORT/){
$record .= "\n";
if ($record =~ /MSGCLS/m){
push @records,[$record,$datetime];
$record = '';
}
}
}
close LOG;
};
# Schwartzian_transform
my @sorted = map { $_->[0] }
sort { $a->[1] cmp $b->[1] } @records;
open SORTED,'>','sorted.log' or die "$!";
print SORTED $_ for @sorted;
close SORTED;
poj |