A seq1 20 B seq2 25 B seq2 80 B seq1 40 C seq1 25 D seq2 30 E seq2 45 #### A B C B D E #### A Seq1 20 B seq1 40 C seq1 25 B seq2 25 D seq2 30 E seq2 45 B seq2 80 D seq2 30 E seq2 45 #### #file opening open(AB,"try_fimo.txt")||die("cannot open"); open(BC,"try_fimo2.txt")||die("cannot open"); #storing file in an array @data=; chomp(@data); @data2=; chomp(@data2); #reading file line by line foreach $line(@data) { foreach $line2(@data2) { if($line2=~/(.*?)\s+(.*?)\s+(.*)/) { $t1=$1; #eg. in first row from file2 i.e.ABC, it will first take A followed by B & C $t2=$2; $t3=$3; } if($line=~/(.*?)\s+(.*?)\s+(.*)/) { if($1 eq $t1) { #storing each column in seperate array based on match push(@tf1,$1); push(@seq1,$2); push(@dis1,$3); # print $1,"\t",$2,"\t",$3,"\t"; } if($1 eq $t2) { push(@tf2,$1); push(@seq2,$2); push(@dis2,$3); } if($1 eq $t3) { push(@tf3,$1); push(@seq3,$2); push(@dis3,$3); } } } } #comparison using loops for($i=0;$i<@tf1;$i++) { for($j=0;$j<@tf2;$j++) { for($k=0;$k<@tf3;$k++) { if(($seq1[$i] eq $seq2[$j]) && ($seq1[$i] eq $seq3[$k])) { if(($tf1[$i] ne $tf2[$j]) && ($tf1[$i] ne $tf3[$k])) { print $tf1[$i],"\t",$seq1[$i],"\t",$dis1[$i],"\t",$tf2[$j],"\t",$seq2[$j],"\t",$dis2[$j],"\t",$tf3[$k],"\t",$seq3[$k],"\t",$dis3[$k],"\n"; } } } } }