Как нарезать несколько последовательностей фаста на подстроки с длиной в диапазоне в формате фаста? - PullRequest
0 голосов
/ 05 января 2019

Учитывая файл, содержащий несколько белковых последовательностей в формате fasta с разными длинами, как генерировать фрагменты белка (подстроки) в формате fasta с длиной i (i больше или равна 5, но не больше, чем длина каждого белка, соответственно )?

Например, файл последовательностей белков:

>NP_12345.1
ACDEFGH
>XP_543211.2
KLMNOP
...

Я хочу формат вывода fast:

>NP_12345.1(1-5)
ACDEF
>NP_12345.1(1-6)
ACDEFG
>NP_12345.1(1-7)
ACDEFGH
>NP_12345.1(2-6)
CDEFG
>NP_12345.1(2-7)
CDEFGH
>NP_12345.1(3-7)    
DEFGH
>XP_543211.2(1-5)
KLMNO
>XP_543211.2(1-6)
KLMNOP
>XP_543211.2(2-6)
LMNOP
...

Может ли кто-нибудь мне помочь? Заранее спасибо.

Примечание: Я могу использовать

Seqkit sliding -s 1 -W 5 

, чтобы сгенерировать fast-формат фрагментов белка или пептидов только с 5 аминокислотами, но если пептиды из 6 аминокислот, я должен изменить параметр -W 6. Любые другие универсальные решения?

1 Ответ

0 голосов
/ 05 января 2019

С Perl, пожалуйста, попробуйте:

perl -e '
$/ = "\xd\xa";  # required if input.txt is created with DOS newline format
while (<>) {
    chomp($name = $_);
    chomp($seq = <>);
    $len = length($seq);
    for ($i = 0; $i <= $len - 5; $i++) {
        for ($j = $i + 5; $j <= $len; $j++) {
            printf("%s(%d-%d)\n", $name, $i+1, $j);
            print substr($seq, $i, $j-$i), "\n";
        }
    }
}' input.txt

, что дает:

>NP_12345.1(1-5)
ACDEF
>NP_12345.1(1-6)
ACDEFG
>NP_12345.1(1-7)
ACDEFGH
>NP_12345.1(2-6)
CDEFG
>NP_12345.1(2-7)
CDEFGH
>NP_12345.1(3-7)
DEFGH
>XP_543211.2(1-5)
KLMNO
>XP_543211.2(1-6)
KLMNOP
>XP_543211.2(2-6)
LMNOP

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...