获得原始顺序的DNA子串
本文关键字:DNA 子串 顺序 原始 | 更新日期: 2023-09-27 18:16:09
我想获得长DNA序列的子串
例如:
1/ATXGAAATTXXGGAAGGGGTGG
2/AATXGAAGGAAGGAAGGGGATATTX
3/AAAAAATTXXGGAAGGGGXTTTA
4/AAAATTXXATAXXGGAAGGGGXTXG
5/ATTATTGTTXAXTATTT
输出为:
1/TXG - TTXX
2/TXG -
3/ - TTXX
4/TTXX - TXG
5/ -
我尝试了以下regex模式:
(TXG|TTXX)
,它的工作原理,结果放在一个列表中,但我不知道如何检索已出现在原始序列中的每个结果的顺序。也就是说,TTXX
和TXG
是否分别在序列4中出现第一和第二,而在序列1中出现第二和第一;在第二和第三个结果中,这是困难的,因为match-xx函数调用不提供子字符串的索引,它从有问题的序列中取出。谢谢你的真知灼见。
如何:
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dump qw(dump);
my %res;
while(my $line = <DATA>) {
chomp$line;
while($line =~ /TXG|TTXX/g) {
push @{$res{$line}}, "found $& at pos:".(pos($line)-length($&));
}
}
dump%res;
__DATA__
ATXGAAATTXXGGAAGGGGTGG
AATXGAAGGAAGGAAGGGGATATTX
AAAAAATTXXGGAAGGGGXTTTA
AAAATTXXATAXXGGAAGGGGXTXG
ATTATTGTTXXXTATTT
输出:(
"ATTATTGTTXXXTATTT",
["found TTXX at pos:7"],
"AATXGAAGGAAGGAAGGGGATATTX",
["found TXG at pos:2"],
"AAAAAATTXXGGAAGGGGXTTTA",
["found TTXX at pos:6"],
"AAAATTXXATAXXGGAAGGGGXTXG",
["found TTXX at pos:4", "found TXG at pos:22"],
"ATXGAAATTXXGGAAGGGGTGG",
["found TXG at pos:1", "found TTXX at pos:7"],
)
如果你放两个匹配的函数呢?
my $result="";
$result.="TXG" if(/TXG/);
$result.="TTXX" if (/TTXX/);
print $result;
perl -ne'($a)=/(TXG)/gc;($b)=/'G.*(TTXX)/;($a,$b)=($1,$a)if$a and not$b and/(TTXX)/;m{^('d/)};printf"$1%5s -%5s'n",$a,$b'