open LOG, "<", "topmod.txt" or die $!; my @logLines = ; close LOG; %totalCPU = {}; %totalMemory = {}; %processCount = {}; #Stores the start time of this 30 second interval my $StartTime = 0; #The calculated end time of this 30 second interval my $EndTime = 0; #Set the first value... if ($logLines[0] =~ /^resc\s+(\d+)\s+\S+\s+\S+\s+\S+\s+\S+\s+\S+\s+\S+\s+\S+\s+(\d+)\s+(\d+\.\d+)\s+\d+:\d+\.\d+(\S+)/) { #Start time is equal to the time of the first entry $StartTime = $1; #End time is 30 seconds from the start time $EndTime = $1 + 30; } foreach(@logLines) { #$1 is the time, $2 is the CPU, $3 is the memory, $4 is the process name if (/^resc\s+(\d+)\s+\S+\s+\S+\s+\S+\s+\S+\s+\S+\s+\S+\s+\S+\s+(\d+)\s+(\d+\.\d+)\s+\d+:\d+\.\d+(\S+)/) { #if true then 30 seconds is up if($StartTime >= $EndTime) { #print out or store average for 30 second interval here #set new start and end values $StartTime = $1; $EndTime = $1 + 30; #Clear values %totalCPU = {}; %totalMemory = {}; %processCount = {}; } $totalCPU{$4} += $2; $totalMemory{$4} += $3; $processCount{$4}++; } }