remove TAG / TAA / TGA

1

Eu tenho um arquivo no formato abaixo mencionado. Eu tenho que excluir os códons de parada (TAG / TAA / TGA) qualquer coisa que corresponda a TAG ou TAA ou TGA. a pesquisa deve ser em múltiplos de três. (como se ele tivesse que pesquisar a cada três letras e, se ele encontrasse codons de parada, esses deveriam ser descartados atg ccc tca aga ). Eu procurei diferentes formas para remover os códons de parada, mas não foi bem-sucedido. aprecio seu tempo. obrigado

input.fa

3 1896    
FOMPING00005383   atgccctcaagacagccggggatgcctccgctggcgcctgggcttcaattcagcccaaaggccagccacggtcagcccacgtcggaagcccatcttccagccattgggtccgccgccgtcgacgtctattcatttgtcacagaagatgcaatcgcgctggggccggcaagctccgtctcacccgaaaatattgtcatgacacaacctaccactatacatcatgactctgtgaaaggcgagaagtttaccgttgagcgagacagcgtcgacgcgctctccttcagctcgaaccagagcgttccccggcc------taagttacccttaccttggcaagtattgatagcggccttgacctgtttgtgtactttcggcaaccactggtcgaat---------------------accaccatcattaaagagacgcatatcaacaactcccaattcgccaccttg------------------
    
por kapr0001 27.02.2017 / 17:49

1 resposta

1

#!/usr/bin/env perl

use strict;
use warnings;

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

    if ($line =~ /\d+\s+\d+/) {
        printf("%s\n", $line);
        next;
    }

    my ( $head, $seq ) = split( /\s+/, $line );

    my $newseq;

    while ( $seq =~ /(...)/g ) {
        if ( $1 !~ /tag|taa|tga/ ) {
            $newseq .= $1;
        }
    }

    printf("%s   %s\n", $head, $newseq);
}

Executando:

$ ./script input.fa >output.fa

Pressupostos e limitações:

  1. O arquivo está em "formato sequencial", conforme descrito aqui: link
  2. Não há espaços na sequência.
  3. O comprimento completo da sequência é um múltiplo de três (caso contrário, o último códon incompleto será deixado de fora da saída).
  4. A sequência não está dividida em várias linhas.

Modo de operação:

  1. Uma linha é lida.
  2. Se ele contiver dois inteiros, assuma que é a "linha de cabeçalho" e imprima-o.
  3. Divida a linha nos caracteres de espaço em $head (o primeiro bit da linha) e $seq (sequência).
  4. Percorra a sequência três bases de cada vez.
  5. Se as três bases atuais corresponderem a um códon de parada, elas não serão colocadas na nova sequência ( $newseq ), caso contrário elas serão.
  6. Edite o bit principal da linha junto com a nova sequência.
  7. Continue com a próxima linha, se presente.

Para obter uma indicação visual dos códons de parada encontrados, altere o loop para

while ( $seq =~ /(...)/g ) {
    if ( $1 !~ /tag|taa|tga/ ) {
        $newseq .= $1;
    }
    else {
        $newseq .= "<STP>";
    }
}
    
por 27.02.2017 / 19:37