gpt4 book ai didi

perl - 在 FASTA 文件中搜索主题并为每个包含主题的序列返回标题行

转载 作者:行者123 更新时间:2023-12-02 00:36:41 25 4
gpt4 key购买 nike

下面是我用于搜索在命令行输入的 FASTA 文件以查找用户提供的主题的代码。当我运行它并输入一个我知道在文件中的主题时,它返回“找不到主题”。我只是 Perl 的初学者,我无法弄清楚如何让它打印找到的主题,更不用说返回标题行了。我将不胜感激任何帮助解决此问题。

谢谢。

use warnings;
use strict;


my $motif;
my $filename;
my @seq;
#my $motif_found;
my $scalar;

$filename = $ARGV[0];

open (DNAFILE,$filename) || die "Cannot open file\n";
@seq = split(/[>]/, $filename);
print "Enter a motif to search for; ";

$motif = <STDIN>;

chomp $motif;
foreach $scalar(@seq) {
if ($scalar =~ m/$motif/ig) {
print "Motif found in following sequences\n";
print $scalar;
} else {
print "Motif was not found\n";
}
}
close DNAFILE;

最佳答案

“滚动你自己的”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,请尝试 this link .如果您有任何问题,请告诉我。

对于像这样的生物信息学问题,我找到了 BioStar论坛很有帮助。

关于perl - 在 FASTA 文件中搜索主题并为每个包含主题的序列返回标题行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4324901/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com