#!c:\perl\bin\ use strict; use Class::Struct; use File::DosGlob 'glob'; use FileHandle; 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\\*.log")){ open (LOG, "<$logfile") or die "Can't open $logfile: $!"; while(){ chomp; #pull off newline s/^\s+//; #pull out leading whitespace s/\s+$//; #pull out trailing whitespace s/\s*,\s*/,/g; #pull out whitespace around commas s/\[|\]//g; #remove [ ] around date time stamp next unless length; #move to the next line unless there is something left in this one 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]; if (!exists $Unique_DeviceType{$entry[2]}){ #Add entry to unique list of Device Types $Unique_DeviceType{$entry[2]} = new FileHandle; open $Unique_DeviceType{$entry[2]}, ">$entry[2].csv"; } if (!exists $Unique_SN{$entry[3]}) { #If this is first occurance $Unique_SN{$entry[3]} = new DEVICE; #Add entry to unique list of SNs $Unique_SN{$entry[3]}->datetime($datetime); $Unique_SN{$entry[3]}->devicetype($entry[2]); $Unique_SN{$entry[3]}->zip($entry[4]); $Unique_SN{$entry[3]}->version($entry[5]); } elsif ($datetime > $Unique_SN{$entry[3]}->datetime) { #If this occurance is newer $Unique_SN{$entry[3]}->datetime($datetime); #update its info $Unique_SN{$entry[3]}->zip($entry[4]); $Unique_SN{$entry[3]}->version($entry[5]); } } close (LOG); } foreach my $sn (keys(%Unique_SN)){ print $Unique_DeviceType{$Unique_SN{$sn}->devicetype} join(",", $Unique_SN{$sn}->datetime, $sn, $Unique_SN{$sn}->zip, $Unique_SN{$sn}->version); #ERROR LINE print $Unique_DeviceType{$Unique_SN{$sn}->devicetype} "\n"; #ERROR LINE } foreach my $devicetype (keys(%Unique_DeviceType)){ close $Unique_DeviceType{$devicetype}; } #foreach my $devicetype (keys(%Unique_DeviceType)){ # open (LIST, ">$devicetype.csv") or die "can't open $devicetype.csv: $!"; # foreach my $sn (keys(%Unique_SN)){ # if($Unique_SN{$sn}->devicetype eq $devicetype){ # print LIST join(",", $Unique_SN{$sn}->datetime, $sn, $Unique_SN{$sn}->zip, $Unique_SN{$sn}->version); # print LIST "\n"; # } # } # close (LIST); #}