in reply to Compare three columns of one file with three columns of another file in perl

Here is some code to show you perl idioms on how to approach this problem.
#!usr/bin/perl use strict; use warnings; my ($infile1 ,$infile2) = @ARGV; open (my $in1 ,"<", $infile1) or die "Cannot open '$infile1':$!\n"; open (my $in2, "<", $infile2) or die "Cannot open '$infile2':$!\n"; my @values; while ( <$in1> ){ chomp; my @one = split; next unless scalar(@one) >= 3; # Must have at least 3 push @values, [@one[0..2]]; } close $in1; while (<$in2>){ chomp; my @two = split; next unless scalar(@two) >= 5; # Must have at least 5 next unless grep { $_->[0] eq $two[0] and $_->[1] eq $two[3] and $_->[3] eq $two[4] } @values; print join("\t",@two[0,3,4]) , "\n" } close $in2;
You will need to understand "array slices", and references.

        "You're only given one little spark of madness. You mustn't lose it."         - Robin Williams

  • Comment on Re: Compare three columns of one file with three columns of another file in perl
  • Download Code

Replies are listed 'Best First'.
Re^2: Compare three columns of one file with three columns of another file in perl
by anonym (Acolyte) on May 26, 2015 at 02:59 UTC

    Thanks but it does not print any output

      This line in my code has a typo .. should be corrected to meet your reaquirements :
      $_->[3] eq $two[4] # should be: $_->[2] eq $two[4]
      The code was intended as a style and structure guide, not necessarily a complete solution.

              "You're only given one little spark of madness. You mustn't lose it."         - Robin Williams

        Thanks but it prints nothing to the standard output