#!/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:
- O arquivo está em "formato sequencial", conforme descrito aqui: link
- Não há espaços na sequência.
- 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).
- A sequência não está dividida em várias linhas.
Modo de operação:
- Uma linha é lida.
- Se ele contiver dois inteiros, assuma que é a "linha de cabeçalho" e imprima-o.
- Divida a linha nos caracteres de espaço em
$head
(o primeiro bit da linha) e$seq
(sequência). - Percorra a sequência três bases de cada vez.
- 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. - Edite o bit principal da linha junto com a nova sequência.
- 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>";
}
}