この問題にうまく対処できているかどうかはわかりません。識別情報を含むファイルがあり、データベース名を持つそれらの識別情報の一部を含む 10 個のファイルがあります (ID ごとに同じですが、ファイル間で異なります)。私がやろうとしているのは、これらの 10 個のファイルのすべての Id を、ID が以前に一致した場合を除いて、ID のみを持つファイルと一致させることです。
これらの 10 個のファイルは次のようなものです。
File 1:
Id Data Data Data Database_name
Id1 ... ... ... GenBank
...
Id20 ... ... ... GenBank
File 2:
Id Data Data Data Database_name
Id2 ... ... ... IMG
Id30 ... ... ... IMG
...
ファイルごとに、これら 2 つの値 (Id と Database_name) を二重キー付きハッシュに入れます。このコードの使用:
if ( -e "result_GenBank" ){
print "Yes, it exist!!!! \n";
open FILE,'<', "result_GenBank" or die "Error Importing GenBank";
while (my $line=<FILE>){
chomp ($line);
my($ClustId, $M5, $Identity, $Evalue, $Bit_score, $Id, $Protein, $Specie, $DB ) = split /\t/g, $line;
$GenBank{$ClustId}{$DB}=1;
}
close FILE;
}
if ( -e "result_KEEG" ){
print "Yes, it exist!!!! \n";
open FILE,'<', "result_KEEG" or die "Error Importing KEEG";
while (my $line=<FILE>){
chomp ($line);
my($ClustId, $M5, $Identity, $Evalue, $Bit_score, $Id, $Protein, $Specie, $DB ) = split /\t/g, $line;
$KEEG{$ClustId}{$DB}=1;
}
close FILE;
}
Id のみのファイルについては、ハッシュにも入れます。
open FILE,'<', "Ids" or die "No Input";
while (my $line=<FILE>){
chomp ($line);
$key=$line;
$total_ID{$key} = 1;
}
close FILE;
ここで、各二重キー付きハッシュ (Id および DB_name) を 1 つのキー (Id) のみを持つハッシュと比較するためのループが必要です。Id が一致する場合は、ID が以前に一致した場合を除き、Id と Db_name を出力して、2 つの異なる Db_name で同じ Id を持つことを回避します。