我想使用 perl 在序列文件中查找模糊匹配,并返回字符串中的字符编号,在该字符串中找到给定数量的替换(假设 S = 2)。例如,如果我的输入文件是:
Name1
ACTGTGACCTTT
Name2
ACCTTTACTGTG
Name3
GACCTTTCTGTG
Name4
GCACCTTTTGTG
Name5
GCTACCTTTGTG
Name6
ACTGACCTTTTG
Name7
ACTGTACCTTTG
Name8
ACCTTTACCTTT
Name9
ACTGTGACTGTG
我的搜索查询是“ACCTTT”。
然后我希望我的输出是这样的:
Name1
6
Name2
0
Name3
1
Name4
2
Name5
3
Name6
4
Name7
5
Name8
0 6
我尝试使用 String::Approx 执行此操作,但此模块仅返回与查询匹配的数组的每个元素的第一个索引。此外,这个模块似乎有问题,即使我将插入和删除的数量设置为 0,并允许 2 次替换,它仍然会返回超过 2 次替换的匹配索引。
这是我正在使用的代码(以防我对此模块有什么不明白的地方)。
#!/usr/bin/perl -w
use String::Approx 'aindex';
my $input_fasta=$ARGV[0];
open(IN,"<$input_fasta") || die ("Error opening $input_fasta $!");
my $l = 0;
my @names;
my @seqs;
while (<IN>){
if ($l % 2 == 0 ){
push (@names, $_);
}
elsif ($l % 2 ==1) {
push (@seqs, $_);
}
$l++;
}
my @hits = aindex("ACCTTT", ["I0", "D0", "S2"], @seqs);
$hl=0;
foreach (@hits){
if ($_ != -1){
print "$names[$hl]$_\n";
$hl++
}
else {
$hl++;
}
}
但这只是返回:
Name1
6
Name2
0
Name3
1
Name4
1
Name5
1
Name6
0
Name7
5
Name8
0