Как нарезать несколько последовательностей фаста на подстроки с длиной в диапазоне в формате фаста?

1

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

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

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

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

>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. Есть ли другие универсальные решения?

Теги:
awk

1 ответ

1
Лучший ответ

С 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

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

  • 0
    Большое спасибо! Я запускаю ваш код "perl -e 'while (<>) {chomp ($ name = $ _); chomp ($ seq = <>); $ len = длина ($ seq); для ($ i = 0; $ i <= $ len - 5; $ i ++) {for ($ j = $ i + 5; $ j <= $ len; $ j ++) {printf ("% s (% d-% d) \ n", $ name, $ i + 1, $ j); печать substr ($ seq, $ i, $ j- $ i), "\ n";}}} 'input.txt ", это быстро и дает мне результат: ( 1-5) 2345,1 ACDEF (1-6) 2345,1 ACDEFG (1-7) 2345,1 ACDEFGH (1-8) 2345,1 ACDEFGH (2-6) 2345,1 CDEFG (2-7) 2345,1 CDEFGH (2-8) 2345,1 CDEFGH (3 -7) 2345,1 DEFGH (3-8) 2345,1 DEFGH (4-8) 2345,1 EEFGH (1-5) 43211,2 KLMNO (1-6) 43211,2 KLMNOP (2-6) 43211,2 LMNOP
  • 0
    Очевидно, (3-7) 2345,1 DEFGH (3-8) 2345,1 DEFGH
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню