Perl анализа позиции файловой базы FASTA

У меня есть файл (sequences.txt) с 3 последовательностями Fasta, например:

>Line40_Chr2L
AAAA
>Line41_Chr2L
CCCC
>Line42_Chr2L
TTTT

Я написал код, который позволяет мне хранить последовательности (без заголовка (>) в переменной с именем $sequences.

open INFILE, $infile or die "Can't open $infile: $!";

my $sequence = ();  # This sequence variable stores the sequences from the .fasta file
my $line;                             # This reads the input file one-line-at-a-time

while ($line = <INFILE>) {
    chomp $line;

     if {
        if($line =~ /^\s*$/) {         # This finds lines with whitespaces from the beginning to the ending of the sequence. Removes blank line.
        next;

    } elsif($line =~ /^\s*#/) {        # This finds lines with spaces before the hash character. Removes .fasta comment
        next; 
    } elsif($line =~ /^>/) {           # This finds lines with the '>' symbol at beginning of label. Removes .fasta label
        next;
    } else {
        $sequence = $line;
    }

    $sequence =~ s/\s//g;               # Whitespace characters are removed
}    
}

Теперь я хочу сравнить одну и ту же позицию в каждой последовательности (в столбцах). Например, я хочу сравнить первую позицию из трех последовательностей. Намерение состоит в том, чтобы проанализировать, есть ли у меня одна и та же база в одном и том же положении последовательностей. Но у меня проблемы с этим, потому что я не знаю, как индексировать столбцы, если у меня есть переменная с 3 последовательностями без разделителя.

Итак, я думал о двумерном массиве (i, j), но я начинаю с Perl, и мне нужна помощь. Или вы знаете более простой способ?

Кто-нибудь может мне помочь?

Большое спасибо!


person userbio    schedule 24.01.2014    source источник


Ответы (1)


Вы можете легко преобразовать строку в массив, используя «split».

В вашем случае вы можете сделать:

my @sequence = split //,$sequence;

если $sequence было, например, «ADQLTEEQ», то @sequence будет массивом из 8 элементов:

0|1|2|3|4|5|6|7
A|D|Q|L|T|E|E|Q

Надеюсь, поможет

person Itzik Lerner    schedule 24.01.2014
comment
Я пробовал это, и это не работает. В моем случае в $sequence хранятся 3 последовательности: AAAAACCCCTTTT Если я печатаю $sequence\n; Я получаю это: AAAAA CCCCC TTTTT И если я попробую: my @sequence = split //,$sequence; он печатает это: TTTT (только последняя последовательность) - person userbio; 24.01.2014
comment
хорошо, что есть работа! Это была моя вина, я делал это вне цикла, извини и спасибо, чувак. Теперь у меня есть 1 столбец для каждой позиции. Еще раз спасибо! - person userbio; 24.01.2014