从给定的基因组序列fasta文件中搜索特定模式

时间:2011-10-05 10:31:49

标签: perl

我正在尝试找到具有特定约束的模式搜索:

将从标准输入要搜索的输入模式。输入

R,W和Y将在模式中的任何位置,在搜索之前应该用以下值替换,因此模式的每个组合都将按顺序搜索。

R = C或G

W = A或T

Y = A或G

[例如,模式可能是AWTYCR,序列可能是ATCGATGAT ....]

我们必须找到起始位置

也允许一个不匹配。

即,与序列匹配时,模式的一个字符可能匹配也可能不匹配。

输出:

应该以表格格式写入文件:

例如,

按顺序ATCGAT发现ATCR(如上所述R = C或G)将导致

S.no位置the_matched_pa​​ttern

1 1 ATCG

2 1 ATCC

匹配和不匹配可能位于任何位置(即,在相同位置或不同位置)

1 个答案:

答案 0 :(得分:1)

以下简单代码是一个起点。可以很容易地推广从文件中读取模式,从Fasta文件中读取序列;独特的结果等。

sub trans_pat {
   my $pat=shift;
   $pat=~s/R/\[CG\]/g;
   $pat=~s/W/\[AT\]/g;
   $pat=~s/Y/\[AG\]/g;
   return $pat;
}
sub find_pat {
   my ($pat,$seq) = (@_);
   print "Looking for pattern $pat\n";
   while ($seq=~m/$pat/g) {
      print "... match at $-[0]: $&\n";
   };
}

my $read_pat="ATCR";
my $seq="ATCGATATCGAT";

# Looking for a perfect match
find_pat (trans_pat($read_pat),$seq);

# Allowing for a single mismatch
foreach $i (1..length $read_pat) {
   my $mis_pat = $read_pat;
   substr($mis_pat,$i-1,1) = ".";
   find_pat (trans_pat($mis_pat),$seq);
}

示例实施:

perl -e 'sub trans {$pat=shift;$pat=~s/R/\[CG\]/g;return $pat};$read_pat="ATCR";$seq="ATCGATATCGAT";$pat=trans($read_pat);print "Looking for pattern $pat\n";while ($seq=~m/$pat/g) {print "... match at $-[0]: $&\n"};foreach $i (1..length $read_pat) {$mis_pat = $read_pat;substr($mis_pat,$i-1,1)=".";$pat=trans($mis_pat);print "Looking for pattern $pat\n"; while ($seq=~m/$pat/g) {print "... match at $-[0]: $&\n"}}'

产量

Looking for pattern ATC[CG]
... match at 0: ATCG
... match at 6: ATCG
Looking for pattern .TC[CG]
... match at 0: ATCG
... match at 6: ATCG
Looking for pattern A.C[CG]
... match at 0: ATCG
... match at 6: ATCG
Looking for pattern AT.[CG]
... match at 0: ATCG
... match at 6: ATCG
Looking for pattern ATC.
... match at 0: ATCG
... match at 6: ATCG