This isn't tested, but I cleaned up your code and added a couple of things to do what I think you need:
#!/usr/bin/perl -w use strict; my $log = './log'; # Open the firewall log file and create new array containing all of th +e data. open LOG, "<", $log or die "Can't open $log: $!"; my @data = <LOG>; close LOG; # Split the @data array into separate arrays by category. my (@dst, @service); my $dup_count = 0; my $last_dst = ''; my $last_service = ''; foreach (@data) { my @lines=split "\n",$_; foreach(@lines){ my ($dst,$service) = (split /;/,$_)[11,12]; push(@dst, $dst); push(@service, $service); if ( $dst eq $last_dst and $service eq $last_service ) { $dup_count++; # you probably want to clean up dup_count here to avoid func # being called for dup 51, dup 52, etc &some_func if $dup_count >= 50; } else { # didn't match, so we reset; $dup_count = 0; } $last_dst = $dst; $last_service = $service; } }
Cheers,
Ovid
Update: Okay, I think I am confused about the specification. I thought we were looking for 50 identical dsts and services in a row. Reading the question closer, it appears to be a has related issue, in which case, TomK32 gave a good answer.
Join the Perlmonks Setiathome Group or just click on the the link and check out our stats.
In reply to (Ovid) Re: Another Array Problem.
by Ovid
in thread Another Array Problem: comparing.
by dru145
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |