#!c:\perl\bin\ no strict; use File::DosGlob 'glob'; use Class::Struct; use Getopt::Std; use vars qw($opt_a); getopts('a:'); my $logPath = "\\\\" . $opt_a . "\\d\$\\iims\\history"; print "Searching $logPath\n"; struct ( DEVICE => { datetime => '$', devicetype => '$', zip => '$', version => '$'}); my %Unique_DeviceType; my %Unique_SN; foreach my $logfile (glob("$logPath\\*")){ open (LOG, "<$logfile") or die "Can't open $logfile: $!"; while(){ chomp; s/^\s+//; s/\s+$//; s/\s*,\s*/,/g; s/\[|\]//g; next unless length; my @entry = split(/,/, $_); #split entry: Date Time DeviceType SN ZIP Version my @date = split(/:/, $entry[0]); #create datetime YYYYMMDDHHMMSS my @time = split(/:/, $entry[1]); my $datetime = $date[2] . $date[1] . $date[0] . $time[0] . $time[1] . $time[2]; my $sn = $entry[3]; $Unique_DeviceType{$entry[2]}++; #Add entry to unique list of Device Types $Unique_SN{$sn}++; #Add entry to unique list of SNs if ($Unique_SN{$sn} == 1) { #If this is first occurance $$sn = new DEVICE; $$sn->datetime('$datetime'); $$sn->devicetype('$entry[2]'); $$sn->zip('$entry[4]'); $$sn->version('$entry[5]'); } elsif ($datetime > $$sn->datetime) { $$sn->datetime('$datetime'); $$sn->zip('$entry[4]'); $$sn->version('$entry[5]'); } } } foreach my $key (keys(%Unique_SN)){ print $key . "\n"; }