Пока мне удалось немного лучше понять Perl, и это облегчение, и я хочу поблагодарить вас, ребята.В настоящее время я все еще работаю над другим аспектом, в котором мне нужно прочитать файл .fasta и найти все нуклеотиды G и C, а затем создать файл с разделителями табуляции.
Это были мои сообщения за последние несколько днейв хронологическом порядке:
- Как мне усреднить значения столбца из данных, разделенных табуляцией ... (решено)
- Почему я не вижу вычисленных результатов в моем выходном файле? (решено)
- Использование файла .fasta для вычисления относительного содержания последовательностей
- Чтение последовательностей .fasta для извлечения данных о нуклеотидах, а затем ... (Пост, предшествующий этому)
Последний запрос все еще обрабатывается, но я добился определенного прогресса.
Некоторый фон, файл .fasta выглядит примерно так:
>label
sequence
>label
sequence
>label
sequence
Я не уверен, как открыть файл .fasta, поэтому я не уверен, какие метки применяются к каким, но я знаю, что гены должны быть помечены либо gag
, pol
, либо env
.Нужно ли открывать файл .fasta, чтобы узнать, что я делаю, или я могу сделать это «вслепую», используя приведенный выше формат?
В любом случае, текущий код, который я имею, выглядит следующим образом:
#!/usr/bin/perl -w
# This script reads several sequences and computes the relative content of G+C of each sequence.
use strict;
my $infile = "Lab1_seq.fasta"; # This is the file path
open INFILE, $infile or die "Can't open $infile: $!"; # This opens file, but if file isn't there it mentions this will not open
my $outfile = "Lab1_SeqOutput.txt"; # This is the file's output
open OUTFILE, ">$outfile" or die "Cannot open $outfile: $!"; # This opens the output file, otherwise it mentions this will not open
my $sequence = (); # This sequence variable stores the sequences from the .fasta file
my $GC = 0; # This variable checks for G + C content
my $line; # This reads the input file one-line-at-a-time
while ($line = <INFILE>) {
chomp $line; # This removes "\n" at the end of each line (this is invisible)
if($line =~ /^\s*$/) { # This finds lines with whitespaces from the beginning to the ending of the sequence. Removes blank line.
next;
} elsif($line =~ qr(^\s*\#/)) { # This finds lines with spaces before the hash character. Removes .fasta comment
next;
} elsif($line =~ /^>/) { # This finds lines with the '>' symbol at beginning of label. Removes .fasta label
next;
} else {
$sequence = $line;
}
$sequence =~ s/\s//g; # Whitespace characters are removed
print OUTFILE $sequence;
}
Код теперь печатает в текстовый файл всю последовательность без пробелов.Единственная проблема в том, что я не знаю, где начинались или заканчивались последовательности, поэтому я не уверен, какие последовательности применимы к каждому гену.Хотя кодон стоп / старт должен дать мне указание.Учитывая это, как бы я изменил / добавил код, чтобы вычислить количество G + C в последовательностях, а затем распечатал их в файл с разделителями табуляции с именами генов, связанных с их соответствующим содержанием G / C?
Я с нетерпением жду ответа от кого-то, кто может дать какое-то руководство, аналогичное приведенному выше коду, относительно того, как найти G / C и затем подсчитать соответствующие значения.