Я работаю с входным файлом, который содержит последовательности с разделителями табуляции. Группы последовательностей разделяются разрывами строк. Файл выглядит следующим образом:Как подсчитать количество ключей, существующих в хеше?
TAGC TAGC TAGC HELP
TAGC TAGC TAGC
TAGC HELP
TAGC
Вот код, у меня есть:
use strict;
use warnings;
open(INFILE, "<", "/path/to/infile.txt") or die $!;
my %hash = (
TAGC => 'THIS_EXISTS',
GCTA => 'THIS_DOESNT_EXIST',
);
while (my $line = <INFILE>){
chomp $line;
my $hash;
my @elements = split "\t", $line;
open my $out, '>', "/path/to/outfile.txt" or die $!;
foreach my $sequence(@elements){
if (exists $hash{$sequence}){
print $out ">$sequence\n$hash{$sequence}\n";
}
else
}
$count++;
print "Doesn't exist ", $count, "\n";
}
}
}
Как я могу сказать, сколько последовательностей существуют, прежде чем напечатать? Мне нужно поместить эту информацию в имя выходного файла.
В идеале у меня бы была переменная, которую я мог бы включить в имя файла. К сожалению, я не могу просто взять скаляр из @elements, потому что есть некоторые последовательности, которые не будут распечатаны. Когда я пытаюсь нажать клавиши, которые существуют в массиве, а затем распечатать скаляр этого массива, я до сих пор не получаю результаты, которые мне нужны. Вот что я пытался (все переменные, которые должны быть глобальными):
open my $out, '>', "/path/to/file.$number.txt" or die $!;
foreach my $sequence(@elements){
if (exists $hash{$sequence}){
push(@Array, $hash{$sequence}, "\n");
my $number = @Array;
print $out ">$sequence\n$hash{$sequence}\n";
#....
Спасибо за помощь. Действительно ценю это.
Это замечательно. Благодарю. – Rob