我不知道我是否很好地面对这个问题。我有一个带有标识的文件,然后是 10 个带有数据库名称的标识的文件(每个 ID 相同,但文件之间不同)。我要做的是将这 10 个文件的所有 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
...
对于每个文件,我将这两个值(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;
}
对于只有 Ids 的文件,我也把它放在一个散列中:
open FILE,'<', "Ids" or die "No Input";
while (my $line=<FILE>){
chomp ($line);
$key=$line;
$total_ID{$key} = 1;
}
close FILE;
现在,我需要一个循环,将每个双键哈希(Id 和 DB_name)与只有一个键(Id)的哈希进行比较。如果 Id 匹配,则打印 Id 和 Db_name,除非 Id 先前已匹配,以避免具有两个不同 Db_name 的相同 Id。