#! /usr/bin/perl use warnings; use strict; use Getopt::Long; my ($filterPassword, $filterIp, $file, $file2, $counter_file1, $counter_file2); my $help = 0; GetOptions(  "password=s"     => \$filterPassword,  "ip=s"           => \$filterIp,  "file=s"         => \$file,  "file2=s"        => \$file2,  "h"              => \$help, ); if ($help) { # &PrintHelp....  exit 1; } # if unless (open (LOG, "<", $file)) {  die "Error: couldn't open '$file': $!\n"; } # unless my %filteredLines; my $counter_file1 = 0; while () { $counter_file1++;  chomp($_);  my (undef, $pass, $ip) = split(/ /, $_);  #if ($pass eq $filterPassword and $ip eq $filterIp) {    if (($pass eq $filterPassword )       or ($ip eq $filterIp) or ($pass eq $filterPassword and $ip eq $filterIp)) {        push(@{$filteredLines{$ip}},$_);  } # if } # while close (LOG); {  local $/ = "\n===";  open(FILE2,"<$file2") or die $!;  my $counter_file2 = 0; while(){ $counter_file2++;   next unless($_ =~ m/ip/s);      next unless($_ =~ m/ip/s);    my ($ip)   = $_ =~ m/ip\s*?:\s+([^\s]+)/s;    my ($pass) = $_ =~ m/password\s*?:\s+([^\s]+)/s;  #  if ($pass eq $filterPassword and $ip eq $filterIp) {   if (($pass eq $filterPassword ) or ($ip eq $filterIp) or ($pass eq $filterPassword and $ip eq $filterIp)) {{      if($filteredLines{$ip}){        print $_,"\n" for(@{$filteredLines{$ip}});      }    } # if  } } } close FILE2; print qq~ IPs in $file: $counter_file1 IPs in $file2: $counter_file2 ~;