Ich versuche, die kürzeste und längste Sequenz in einer Datei, die mehrere genbankähnliche Einträge enthält. Beispiel für die Datei:Get kürzeste und längste Sequenz in Datei
LOCUS NM_182854 2912 bp mRNA linear PRI 20-APR-2016
DEFINITION Homo sapiens mRNA.
ACCESSION NM_182854
SOURCE Homo sapiens (human)
ORGANISM Homo sapiens
Eukaryota; Metazoa; Chordata; Craniata; Vertebrata; Euteleostomi;
Mammalia; Eutheria; Euarchontoglires; Primates; Haplorrhini;
Catarrhini; Hominidae; Homo.
ORIGIN
1 gggcgatcag aagcaggtca cacagcctgt ttcctgtttt caaacgggga acttagaaag
61 tggcagcccc tcggcttgtc gccggagctg agaaccaaga gctcgaaggg gccatatgac
//
LOCUS NM_001323410 6992 bp mRNA linear PRI 20-APR-2016
DEFINITION Homo sapiens mRNA.
ACCESSION NM_001323410
SOURCE Homo sapiens (human)
ORGANISM Homo sapiens
Eukaryota; Metazoa; Chordata; Craniata; Vertebrata; Euteleostomi;
Mammalia; Eutheria; Euarchontoglires; Primates; Haplorrhini;
Catarrhini; Hominidae; Homo.
ORIGIN
1 actacttccg gcttccccgc cccgccccgt ccccgggcgt ctccattttg gtctcaggtg
61 tggactcggc aagaaccagc gcaagaggga agcagagtta tagctacccc ggc
//
Ich mag die Zugangsnummer, die Art des Organismus, aus der kürzesten Sequenz und die längste Sequenz so weit
mein Code drucken:
#!/usr/bin/perl
use strict;
use warnings;
print "enter file path\n";
while (my $line = <>){
chomp $line;
my @record = ($line);
foreach my $file(@record){
open(IN, "$file") or die "\n error opening file \n;/\n";
$/="//";
while (my $line = <IN>){
my @gb_seq = split ("ORIGIN", $line);
my $definition = $gb_seq[0];
my $sequence = $gb_seq[1];
$definition =~ m/ORGANISM[\s\t]+(.+)[\n\s\t]+/;
my $organism = $1;
if ($definition =~ m/ACCESSION[\s\t]+(\D\D_\d\d\d\d\d\d(\d*))[\n\s\t]+/){
my $accession = $1;
$sequence =~ s/\d//g;
$sequence =~ s/[\n\s\t]//g;
my $size = length($sequence);
my @sorted_keys = sort { $a <=> $b } keys my %size;
my $shortest = $sorted_keys[0];
my $longest = $sorted_keys[-1];
print "this is the shortest: $accession $organism size: $shortest\n";
print "this is the longest: $accession $organism size: $longest\n";
}
}}}
exit;
Ich dachte daran, die Länge in einen Hash zu setzen, um den kürzesten und den längsten zu bekommen, aber da stimmt etwas nicht. Ich bekomme folgende Fehler:
Use of uninitialized value $organism in concatenation (.) or string at test.pl line 39, <IN> chunk 1
Use of uninitialized value $shortest in concatenation (.) or string at test.pl line 39, <IN> chunk 1.
Use of uninitialized value $longest in concatenation (.) or string at test.pl line 40, <IN> chunk 1.
Welchen Teil soll ich ändern? Danke
Ich sehe 'ORGANISMUS' in den Daten nicht. Vielleicht meinst du ORIGIN? – Kaz
Ihr Hauptproblem besteht darin, dass Sie eine frische leere% s-Größe deklarieren, die für den Befehl sort verwendet wird, der keine Relevanz für den obigen $ size-Skalar hat. Sie müssen etwas wie eine $ bigest_sequence und $ smallest_sequence über der while ($ line) Schleife deklarieren und für jede Sequenz berechnen, ob sie von der alten $ big_sequence oder $ smallest_sequence stattfinden soll. – mekazu
ja, sorry, ich habe den Header ausgeschnitten, weil er zu groß war und den organismussteil verpasst hat. – jnmf