Я не знаю, хорошо ли я столкнулся с этой проблемой. У меня есть файл с идентификаторами, а затем 10 файлов с некоторыми из этих идентификаторов с именем базы данных (то же самое для каждого идентификатора, но отличается между файлами). То, что я пытаюсь сделать, соответствует всем идентификаторам этих 10 файлов с файлом только с идентификаторами, за исключением случаев, когда идентификация была сопоставлена ранее.Perl: Сравнить хеш-ключи вдоль нескольких хэшей
Те 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;
}
Для файла только с идентификаторами, я положил его в хэш:
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 и Db_name, за исключением случаев, когда идентификатор был сопоставлен ранее, чтобы избежать использования одного и того же идентификатора с двумя разными именами Db_names.
Если вам не нужно печатать значения с одинаковыми идентификаторами, почему бы не сохранить все эти значения в одном хэше? – Suic