use strict; use warnings; my $search='\bconnected, address\b' ; my @users = qw(x3Oni Ramon Loly Mini Grasutza bullet Ad0n); my %R; print "search: @users\n"; while () { next unless /$search/o; s/L /:/; s/<.*>//; s/$search//o; s/ - /-/; my ($time, $name, $addy) = m!([-\d/:]*)\s*"([^"]*)"[^"]*"([^"]*)!; my $cleanName = name_match ($name); next unless $cleanName; my $nTime = fix_time ($time); my $rec = "$nTime $time $name"; if (! exists $R{$cleanName}) { $R{$cleanName} = $rec; next; } my ($t) = $R{$cleanName} =~ /^(\d+)/; $R{$cleanName} = $rec if $nTime > $t; } print "--------------------------\n"; my @values = sort values %R; foreach my $v (@values) { print STDOUT (split /:/, $v, 2)[1]; print "\n"; } # compare names, log names may have attributes; like sub name_match { my $test = shift; $test =~ tr/"//d; for (@users) { my $pos = length ($test) - length; my $at = index ($test, $_); return $_ if $pos == $at; } return ""; } # convert time from 'L: MM/DD/YYYY - hh:mm:ss' to YYYYMMDDhhmmss # which makes time comparison a doddle sub fix_time { local $_ = shift; s/.//; tr/://d; my($date, $time) = split /-/; my ($m, $d, $y) = split "/", $date; return "$y$m$d$time"; } __DATA__ L 03/31/2006 - 00:18:19: "smilE :) x3Oni<109><>" connected, address "82.78.68.195:27005" L 03/31/2006 - 00:19:40: "smilE :) Ramon<110><>" connected, address "86.55.92.11:27005" L 03/31/2006 - 00:23:06: "smilE :) Ramon<111><>" connected, address "86.55.92.11:27005" L 03/31/2006 - 00:33:50: "smilE :) Ramon<112><>" connected, address "86.55.92.11:27005" L 03/31/2006 - 00:35:09: "mT - Loly<113><>" connected, address "81.24.24.209:27005" L 03/31/2006 - 00:35:31: "mT - Mini^Me<114><>" connected, address "81.196.153.50:27005" L 03/31/2006 - 00:36:42: "mT - Grasutza<115><>" connected, address "81.24.24.207:27005" L 03/31/2006 - 00:38:05: "rrr<116><>" connected, address "82.208.167.71:27005" L 03/31/2006 - 00:38:35: "rrr<117><>" connected, address "82.208.167.71:27005" L 03/31/2006 - 00:41:03: "mT - kdt<118><>" connected, address "82.76.231.13:27005" L 03/31/2006 - 01:18:03: "smilE :) x3Oni<119><>" connected, address "82.78.68.195:27005" L 03/31/2006 - 01:28:18: "astralis[mix] . bullet[A]<120><>" connected, address "86.106.193.40:27005" L 03/31/2006 - 01:28:43: "astralis[mix] . BNj-_-<121><>" connected, address "81.24.24.227:27005" L 03/31/2006 - 01:30:10: "astralis[mix] . sUIFTI-_^<122><>" connected, address "84.247.25.70:27005" L 03/31/2006 - 01:31:30: "astralis[mix] . AD0n<123><>" connected, address "85.120.80.131:27005"