Ich arbeite mit einer Eingabedatei, die Tab-delimitierte Sequenzen enthält. Gruppen von Sequenzen sind durch Zeilenumbrüche getrennt. Die Datei wie folgt aussieht:Wie zählt man die Anzahl der Schlüssel in einem Hash?
TAGC TAGC TAGC HELP
TAGC TAGC TAGC
TAGC HELP
TAGC
Hier ist der Code ich habe:
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";
}
}
}
Wie kann ich feststellen, wie viele Sequenzen vorhanden sein, bevor ich drucken? Ich muss diese Informationen in den Namen der Ausgabedatei eingeben.
Idealerweise hätte ich eine Variable, die ich in den Namen der Datei aufnehmen könnte. Leider kann ich nicht einfach den Skalar von @elements verwenden, da einige Sequenzen nicht ausgedruckt werden. Wenn ich versuche, die vorhandenen Schlüssel in ein Array zu schieben und dann den Skalar dieses Arrays zu drucken, bekomme ich immer noch nicht die Ergebnisse, die ich brauche. Hier ist, was ich versucht habe (alle Variablen, die global sein müssen):
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";
#....
Danke für die Hilfe. Schätze es wirklich.
Das ist großartig. Vielen Dank. – Rob