>  I have a feeling that I am going about this in the wrong
> way.  Can I use hashes in a better way to sort the data based on the
> keys?  Better yet, can I evaluate the number of keys that match each
> other?

I don't understand what that means.

John



Oh - I wanted to eliminate all members of the array that had more than
10 instances of the same port.  I was hoping that you could do
something like "count keys where port = gi1/1/49".  After knowing how
many gi1/1/49 there were, you could remove them if they met your high
water mark.

I ended out just looking for duplicates, which will achieve the basic
task at hand.:

   ### Sort the data based on the port name
   @data = sort { $a-> {port} cmp $b-> {port} } @data;

   ### Test to see if the port names are the same (look ahead and
behind)
   $j = 0;
   for($i = 0; $i <= $#data; $i++) {
      if ($j < $#data) {
         $j = $i+1;
         $k = $i-1;
         #print "$data[$i]{'vlan'}, $data[$i]{'host'}, $data[$i]
{'mac'}, $data[$i]{'port'}, i = $i, j= $j, k= $k, total = $#data\n";
         if ((($data[$i]{'port'} ne $data[$j]{'port'}) && ($data[$i]
{'port'} ne $data[$k]{'port'})) || ($data[$i]{'port'} eq "wireless"))
{
         open (dataDump, ">>$data_dump") or die "Can't edit
$data_dump : $!";
            print dataDump ("$data[$i]{'vlan'}\t$data[$i]{'host'}\t
$data[$i]{'mac'}\t$data[$i]{'port'}\n");
         close (dataDump);
         }
      } else {
         $k = $i-1;
         if (($data[$i]{'port'} ne $data[$k]{'port'}) || ($data[$i]
{'port'} eq "wireless")) {
         #print "$data[$i]{'vlan'}, $data[$i]{'host'}, $data[$i]
{'mac'}, $data[$i]{'port'}, i = $i, j= $j, k= $k, total = $#data\n";
         open (dataDump, ">>$data_dump") or die "Can't edit
$data_dump : $!";
            print dataDump ("$data[$i]{'vlan'}\t$data[$i]{'host'}\t
$data[$i]{'mac'}\t$data[$i]{'port'}\n");
         close (dataDump);
         }
      }

Ultimately, I am trying to track down MAC addresses on a network and
associate them with a port.  I build @data by reading in a screen
scrap of every MAC address table on the network (one at a time), which
is the output from a different script.  I need to eliminate MACs that
are trunked across other devices (they show up as a bunch of MACs on a
single interface, in several other mac-address tables on other
devices).  By only looking for unique addresses, I can find anyone
plugged into a legitimate port.  However, I cannot find someone that
has plugged in a Linksys switch into a port - because multiple MACs
will be associated with a single port, if they have more than one
active device on their device.  I figure that 2 - 16 of these "bad"
addresses could show up from a rogue switch.  So, I figured that I'd
start at 10 and tweak it from there.

I thought that all this information would confuse the issue that I am
trying to resolve.  I hope that it is not an overload.

Thank you all again for your assistance.  I will keep checking back in
to see if anyone has a better idea to solve what I like to call the
"real world issue", versus the "everyone behaves as I want them to"
problem.  Even though this solves 90%+ of the problem, I want to clean
up the solution a bit.

Jim


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/


Reply via email to