1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
|
#!/usr/bin/perl
my ($l1, $l2, @diffargs);
@diffargs = ();
foreach my $arg (@ARGV) {
if ($arg =~ /^-/) {
push @diffargs, $arg;
} elsif (defined $l1) {
$l2 = $arg;
} else {
$l1 = $arg;
}
}
my $tmp1 = "/tmp/logdiff.$$.1";
my $tmp2 = "/tmp/logdiff.$$.2";
fixfile($l1, $tmp1);
fixfile($l2, $tmp2);
system "diff", @diffargs, $tmp1, $tmp2;
unlink($tmp1);
unlink($tmp2);
exit;
sub fixfile {
my $inf = shift;
my $outf = shift;
die "cannot find $inf" unless -f $inf;
open (IN, "-|", "sort \"$inf\"") or die "cannot open $inf";
open (OUT, ">$outf") or die "cannot open $outf";
while (<IN>) {
if (!/^([\.Y]\s+\S+\s+\S+)\s+(\S+)\s+(.+)/) {
print OUT;
next;
}
my ($scorepath, $rules, $meta) = ($1,$2,$3);
my @rules;
foreach my $r (split(/,/, $rules)) {
my $hits = 1;
# Support compacted RULE(hitcount) format
if ($r =~ s/\((\d+)\)$//) {
$hits = $1;
}
push @rules, $r for (1 .. $hits);
}
@rules = sort grep {
$_ !~ /^AWL$/
} @rules;
$rules = join(',', @rules);
$meta =~ s/\bscantime=\d+/scantime=N/gs; # frequently different
print OUT "$scorepath $rules $meta\n";
}
close IN;
close OUT;
}
|