Получить ДНК-подстроки по их оригинальным заказам - PullRequest
2 голосов
/ 29 ноября 2011

Я бы хотел получить подстроки длинных последовательностей ДНК

Например, дано:

1/ATXGAAATTXXGGAAGGGGTGG
2/AATXGAAGGAAGGAAGGGGATATTX
3/AAAAAATTXXGGAAGGGGXTTTA
4/AAAATTXXATAXXGGAAGGGGXTXG
5/ATTATTGTTXAXTATTT

вывод должен быть:

1/TXG    -  TTXX
2/TXG     -
3/       -  TTXX
4/TTXX  -   TXG
5/             -    

Я попробовал следующий шаблон регулярных выражений:

(TXG|TTXX) 

и это работает, и результаты помещаются в список, но я не знаю, как получить порядок каждого результата, который появился в исходных последовательностях. То есть, * появляются ли TTXX и TXG соответственно первый и второй, как в последовательности 4, но второй и первый, как в последовательности 1; а во 2-м и 3-м результатах это сложнее, потому что вызов функции match-xx не предлагает индекс подстроки, взятой из рассматриваемой последовательности. Спасибо за ваши идеи.

Ответы [ 3 ]

3 голосов
/ 29 ноября 2011

Как насчет:

#!/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"],
)
0 голосов
/ 29 ноября 2011
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'
0 голосов
/ 29 ноября 2011

Что делать, если вы поставили 2 соответствующие функции?

my $result="";

$result.="TXG" if(/TXG/);
$result.="TTXX" if (/TTXX/);

print $result;
...