获得原始顺序的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) 

,它的工作原理,结果放在一个列表中,但我不知道如何检索已出现在原始序列中的每个结果的顺序。也就是说,TTXXTXG是否分别在序列4中出现第一和第二,而在序列1中出现第二和第一;在第二和第三个结果中,这是困难的,因为match-xx函数调用不提供子字符串的索引,它从有问题的序列中取出。谢谢你的真知灼见。

获得原始顺序的DNA子串

如何:

#!/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'