Сравнивая 2 строки разных размеров

Я немного новичок в Perl и сравниваю две строки разного размера, содержащие нуклеотиды ДНК. Я хочу, чтобы скрипт взял меньшую строку и поместил ее в намного большую строку, учитывая несоответствия и предоставив мне последовательность, найденную в большей строке, плюс смежные 5 нуклеотидов с каждой стороны.

Так, например, если у меня есть 2 строки:

#1  ATGATCCTG
#2  TCGAGTGGCCATGAACGTGCCAATTG

Я хочу, чтобы скрипт взял #1 и нашел ту же самую последовательность в #2, которая присутствует, но с 2 несоответствиями и 5 нуклеотидами с каждой стороны.

1 ответ

Я думаю, что использование уже существующего и хорошо протестированного модуля - это путь для решения таких задач. Известно, что perl имеет много биомодулей и использования, поэтому быстрый поиск в cpan, который я нашел, - Bio::Grep, это может быть хорошая помощь

РЕДАКТИРОВАТЬ

Является ли это возможным? да, кто-то делал это раньше, так что это возможно, но я не думаю, что это простая задача, которую можно выполнить с помощью простого регулярного выражения

Я попытался сделать простой пример настолько, насколько я могу понять, так как я не био эксперт

use strict;
use warnings;
use Data::Dumper;

my $str1 = 'ATGATCCTG';
my $str2 =  'TCGAGTGGCCATGAACGTGCCAATTG';

my @s1 = split '', $str1;

my $miss = 0;
my $pattern = '';
for (@s1){
    my $r = $_;
    if ($str2 =~ /$pattern$r/){
        $pattern .= $r;
    } else {
        $miss++;
        $pattern .= '[ATCG]'
    }
}

##this is the pattern we used
print Dumper $pattern;

##withoud 5 nucleotides on both sides
#$str2 =~ m/($pattern)/g;

#5 nucleotides on both sides match pattern
$str2 =~ m/(\w{0,5}$pattern\w{0,5})/g;

##this is the match
print Dumper $1;

##number of missmatches
print Dumper $miss;

Опять же, я не уверен, что это способ сделать это точно, и абсолютно не способ следовать особенно с большими последовательностями ДНК, но для вашей задачи выше, я думаю, что это нормально.

Другие вопросы по тегам