Нет смысла «катать свой собственный» парсер Fasta.BioPerl потратил годы на его разработку, и было бы глупо не использовать его.
use strict;
use Bio::SeqIO;
my $usage = "perl dnamotif.pl <fasta file> <motif>";
my $fasta_filename = shift(@ARGV) or die("Usage: $usage $!");
my $motif = shift(@ARGV) or die("Usage: $usage $!");
my $fasta_parser = Bio::SeqIO->new(-file => $fasta_filename, -format => 'Fasta');
while(my $seq_obj = $fasta_parser->next_seq())
{
printf("Searching sequence '%s'...", $seq_obj->id);
if((my $pos = index($seq_obj->seq(), $motif)) != -1)
{
printf("motif found at position %d!\n", $pos + 1);
}
else
{
printf("motif not found.\n");
}
}
Эта программа находит только (основанную на 1) позицию первого совпадения мотива в каждой последовательности.Это может быть легко отредактировано, чтобы найти положение каждого матча.Он также может не печатать вещи точно в том формате, который вы хотите / нужен.Я оставлю эти вопросы как «упражнение для читателя».:)
Если вам нужно скачать BioPerl, попробуйте по этой ссылке .Дайте мне знать, если у вас есть какие-либо проблемы.
Для подобных вопросов по биоинформатике я нашел форум BioStar очень полезным.