# This is part of the parser for merge different ID mapping files $n = 0 ; foreach $file (@files){ open(In,$file) or die; $line = ; chomp($line); @name = split(/\t/,$line); $name{$name[0]} = 1 ; $name{$name[1]} = 1 ; while(){ chomp; @array = split(/\t/,$_); $tag = 0 ; @tmp = split(/\t/,$array[0]); foreach $tmp(@tmp){ if( exists($hash{$name[0]." : ".$tmp}) ){ $tmpKey = $hash{$name[0]." : ".$tmp}." : ".$name[0] ; $hash{$tmpKey} = $hash{$tmpKey}.";".$array[0] ; print $tmpKey."\t".$hash{$tmpKey}."\n" ; $tmpKey = $hash{$name[0]." : ".$tmp}." : ".$name[1] ; $hash{$tmpKey} = $hash{$tmpKey}.";".$array[1] ; print $tmpKey."\t".$hash{$tmpKey}."\n" ; $tag = 1 ; } } @tmp = split(/\t/,$array[1]); foreach $tmp(@tmp){ if( exists($hash{$name[1]." : ".$tmp}) ){ $tmpKey = $hash{$name[1]." : ".$tmp}." : ".$name[0] ; $hash{$tmpKey} = $hash{$tmpKey}.";".$array[0] ; print $tmpKey."\t".$hash{$tmpKey}."\n" ; $tmpKey = $hash{$name[1]." : ".$tmp}." : ".$name[1] ; $hash{$tmpKey} = $hash{$tmpKey}.";".$array[1] ; print $tmpKey."\t".$hash{$tmpKey}."\n" ; $tag = 1 ; } } if($tag==0){ $n = $n + 1 ; $hash{$n." : ".$name[0]} = $array[0] ; $hash{$n." : ".$name[1]} = $array[1] ; @tmp = split(/\t/,$array[0]); foreach $tmp(@tmp){ $hash{$name[0]." : ".$tmp} = $n ; } @tmp = split(/\t/,$array[1]); foreach $tmp(@tmp){ $hash{$name[1]." : ".$tmp} = $n ; } } } close(In); } @name = sort(keys(%name)); print Out "newKey" ; foreach $name( @name ){ print Out "\t$name" ; } print Out "\n" ; for($i=1;$i<=$n;$i++){ print Out "$i" ; foreach $name( @name ){ $tmp = $hash{$i." : ".$name} ; $tmp =~s/^;// ; @array = split(/;/,$tmp) ; %tmphash = map { $_ => 1 } @array; $tmp = join(";",sort(keys(%tmphash)) ); print Out "\t$tmp" ; } print Out "\n" ; } close(Out);