#!/usr/bin/perl -w use strict; use Date::Calc qw(Mktime); open (BIGLOG, "< D:/Logs/biglog.unsorted.log") || die "Cannot open unsorted log $!"; my( $offset, @index ) = 0; while (){ my $epoch = ( /^\s*#/ or /^\s\n/ or $_ !~ /^\s*\d/ ) ? 0 : Mktime( unpack 'A4xA2xA2xA2xA2xA2', $_ ); push @index, pack 'NN', $epoch, $offset; $offset = tell BIGLOG; } @index = sort {$a cmp $b} @index; open (OUTFILE, "> D:/Logs/biglog.sorted.log") || die "Cannot write sorted log $!"; while (@index){ print OUTFILE readline_n(\*BIGLOG, shift @index); } close BIGLOG; close OUTFILE; exit; sub readline_n{ my( $fh, $line) = @_; seek ($fh, unpack( 'N',substr( $line, 4, 4 )), 0) || warn "Problem seeking to $line $!\n"; scalar <$fh> }