Соответствие строк в Perl, найти количество совпадений - PullRequest
0 голосов
/ 20 ноября 2011

Как мне найти number of of each 2 consecutive characters AA, AC,AG,AT,CC,CA... в такой последовательности:

$sequence = 'AACGTACTGACGTACTGGTTGGTACGA' 

Перекрытие не допускается, т. Е. Последовательность $ содержит слева направо AA CG TA CT .... а не AAAC CG ...

1 Ответ

5 голосов
/ 20 ноября 2011
@result = $subject =~ m/[ACTG][ATGC]/g;

print scalar(@result);

Редактируйте, потому что вы полностью изменили свой вопрос:

use strict;

my $subject = "AACGTACTGACGTACTGGTTGGTACGA";
my %results = ();
while ($subject =~ m/[ACTG][ATGC]/g) {
    # matched text = $&
        if(exists $results{$&})
        {
            $results{$&}++ 
        }
        else
        {
            $results{$&} = 1;
        }
}

foreach (sort keys %results) {
    print "$_ : $results{$_}\n";
  }

Выход:

AA : 1
CG : 3
CT : 2
GA : 1
GG : 2
TA : 3
TT : 1

Окончательное редактирование: надеюсь ... спасибо @ canavanin

use strict;

my $subject = "AACGTACTGACGTACTGGTTGGTACGA";
my %results = ();
while ($subject =~ m/[ACTG][ATGC]/g) {
    # matched text = $&
    $results{$&}++ 
}

foreach (sort keys %results) {
    print "$_ : $results{$_}\n";
  }
...