#!/usr/bin/perl use warnings; use strict; my $LOGDIR = '/hlds/cstrike/logs'; my $USERS = '/hlds/cstrike/addons/adminmod/config/users.ini'; my $search = qr/\bconnected, address\b/; my @users = do { open my $U, $USERS or die "cannot open $USERS:$!"; local $/; <$U> =~ /^[^:]+/mg; }; print "search:@users\n"; my $user_pattern = qr/\b(@{[ join '|', map "\Q$_", reverse sort @users ]})\b/; my %R; @ARGV = <$LOGDIR/*.log>; while ( <> ) { next unless / (\d\d)\D+(\d\d)\D+(\d{4})\D+(\d\d)\D+(\d\d)\D+(\d\d): .+? $user_pattern .+? $search /x; @{ $R{ $7 } }{ qw/date line/ } = ( "$3$1$2$4$5$6", $_ ) if not exists $R{ $7 }{ date } or $R{ $7 }{ date } lt "$3$1$2$4$5$6"; } print "--------------------------\n", sort map $_->{ line }, values %R; __END__