It does seem very complicated :) Can't you just
use the Unix sort command to sort the files?
And I think you may have made a mistake when copying
your code into this post. What you have there doesn't
compile - it is missing a closing brace somewhere.
Update: I think there was a paste error
in the code. A large chunk of the code was repeated. He's
what I think the code should look like (Note: I've
reformatted it a bit, but haven't made any fixes yet)
#!/usr/local/bin/perl -w
use strict;
$| = 1;
use diagnostics;
####################################################################
## This file is designed to reorder the log files for the corporate
## web server. These log files will be sequentially ordered for
## faster parsing.
####################################################################
my $existingLogFile;
my $newLogFile = "$existingLogFile"."_sorted";
my $logdirs = "/data/sortlogs/";
my @unique;
my $counter = 0;
my @timestamps;
opendir (LOGDIR, $logdirs) or die "no $logdirs: $!";
while ($_ = readdir(LOGDIR)) {
if ($_ =~ /^access/) {
$existingLogFile = $_;
}
}
open (EXFILE, $existingLogFile)
or die "Could not open $existingLogFile $!";
while (<EXFILE>) {
if (/^\d/) {
chomp;
my ($begOfLog, $timeString, $endOfString) = split /[\[\]]/, $_;
push (@timestamps, $timeString);
}
}
close (EXFILE);
@timestamps = sort (@timestamps);
$unique[0] = $timestamps[0];
foreach my $stamp(@timestamps) {
unless ($stamp eq $unique[$counter]) {
push (@unique, $stamp);
$counter++;
}
}
foreach my $ts (@unique) {
open (SORTEDFILE, ">>$newLogFile")
or die "Could not open $newLogFile $!\n";
open (EXFILE, "+<$existingLogFile")
or die "Could not open $existingLogFile $!";
while (<EXFILE>) {
my ($before, $entryStamp, $after) = split /[\[\]]/, $_;
my $strippedEntry = tell(EXFILE);
if ($ts eq $entryStamp) {
print SORTEDFILE $_;
} else {
open (TEMPFILE, ">>/data/temp")
or die "Couldn't open temp file $!\n";
print TEMPFILE $_;
}
}
close (EXFILE);
close (SORTEDFILE);
close (TEMPFILE);
rename ("/data/temp",$existingLogFile);
}
--
<
http://www.dave.org.uk>
"The first rule of Perl club is you don't talk about
Perl club."