• Publicidad

Eliminar "padding" de archivo .SAM

Perl aplicado a la bioinformática

Eliminar "padding" de archivo .SAM

Notapor danusol » 2012-03-08 06:16 @303

Hola,

Tengo un archivo de alineamiento en formato SAM que tiene un encabezado y una sucesión de líneas con varios campos, os muestro un trozo:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
  1. @HD     VN:1.0  GO:none SO:coordinate
  2. @SQ     SN:APB LN:360
  3. @RG     ID:I245 SM:Sample_Mult_1
  4. @PG     ID:AA  PN:DataAnalyzer    VN:2.6
  5. @CO     Sequencing System.
  6. APB    0       APB    42      255     41H23M1P6M1P4M1P5M1P6M1P6M1P12M1P5M1P2M1P15M1P2M1P59M1P23M1P2M1P2M1P2M1P7  *       0       0       AGCTTAGCTTGGAAAGCCTCACCTCTTACTTTTCCATTGAGTCATCTACCAAAGGA  *       MD:Z:319        NM:i:0
  7. HEWCEEE01A0C7I  0       APOBex26_M13    42      255     41H23M1P6M1P4M1P5M1P6M1P6M1P12M1P5M1P2M1P15M1P2M1P59M1P23M1P2M1P2M1P2M1P7M1P  *       0       0       AGCTTAGCTTGGAAAGCCTCACCTCTTACTTTTCCATTGAGTCATCTACCAAAGGAGATGTCAAGGGTTCGGTTC  *       MD:Z:319        NM:i:0
  8. HEWCEEE01A2AQM  0       APOBex26_M13    42      255     41H23M1P6M1P4M1P5M1P6M1P6M1P12M1P5M1P2M1P15M1P  *       0       0       AGCTTAGCTTGGAAAGCCTCACCTCTTACTTTTCCATTGAGTCATCTACCAAAGGA  *       MD:Z:319        NM:i:0
  9.  
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


El campo 6 conocido como CIGAR es una sucesión de números y letras. Las letras posibles son MIDNSHP, aunque en mi ejemplo no tengo todas. Este campo se distribuye por parejas de número/letra. por tanto, en la primera línea del ejemplo podemos leer algo así como 41H-23M-1P-6M-1P... etc.

La letra P significa que se ha hecho "padding" en el alineamiento.

Mi objetivo es eliminar la letra P y su correspondiente número en todas las líneas. En el ejemplo el número es siempre '1' pero puede ser cualquiera de uno o más de un dígito. He intentado hacer lo siguiente pero me deja el archivo igual:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #! usr/bin/perl -w
  2. # use strict
  3.  
  4.  
  5. open (IN, $ARGV[0]) || die "File IN not found\n";
  6. my @salida= split /./, $ARGV[0];
  7. my $nombre= $salida[0] . "_unpad_" . $salida[1];
  8.  
  9. open OUT, ">", $nombre or die $!;
  10.  
  11. while (<IN>) {
  12.   chomp;
  13. my $pattern =~ '([MIDNSH])(\d+P)'; #texto a buscar. Quiero eliminar la segunda parte, por eso meto cada bloque entre paréntesis. No hace falta incluir P en la primera parte porque lee de izda. a dcha.
  14. foreach($_)
  15.   {
  16.       s/$2//g; #solo quiero que me elimine la P con su número
  17.  
  18. print OUT $_,"\n";
  19.   }
  20. }
  21. close (IN);
  22. close (OUT);
  23.  
  24.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


¿Alguien me puede ayudar?

Gracias
danusol
Perlero nuevo
Perlero nuevo
 
Mensajes: 46
Registrado: 2010-04-22 07:08 @339

Publicidad

Re: Eliminar "padding" de archivo .SAM

Notapor explorer » 2012-03-08 07:22 @349

Con este mini-programa lo puedes resolver desde la línea de comandos:

Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. $ perl -p -i.bak -E 'next if /^@/; s/\d+P//g' code_29985.txt
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

Lo que hacemos es un bucle (-p) sobre el fichero indicado (code_29985.txt), leyéndolo por líneas, y ejecutando el programa (-E) en cada línea. Si la línea comienza por '@', no hacemos nada, y pasamos a la siguiente. Si no, hacemos la sustitución de toda combinación de \d+P por nada, a lo largo de toda la línea (/g). El fichero original es renombrado con .bak, y el resultado nuevo queda en el propio fichero (-i.bak).
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Eliminar "padding" de archivo .SAM

Notapor explorer » 2012-03-08 10:16 @469

Acabo de darme cuenta de que hay un fallo en mi solución: está borrando cualquier aparición de un número seguido de una 'P', por lo que también borraría apariciones de esas combinaciones en otros lugares de la línea, como por ejemplo, en el primer campo.

Una solución rápida sería trabajar con columnas, filtrar la que nos interesa, y volver a recrear la línea:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. $ perl -p -i.bak -a -E 'next if /^@/; $F[5] =~ s/\d+P//g; $_ = join("\t", @F) . "\n"' code_29985.txt
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Pero perdemos los espacios originales y los sustituimos por un carácter tabulador.

No sé si esto te servirá. O si prefieres poner todo esto en forma de programa.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Eliminar "padding" de archivo .SAM

Notapor danusol » 2012-03-09 04:50 @243

Gracias Explorer. El tema de que la eliminación ocurra en cualquier otro campo además del de interés sí que es importante porque cambiaría posiblemente la primera columna que es el identificador de la secuencia. La verdad es que no tengo muy claro cómo se definen los espacios originalmente en este archivo. No es importante que todo sea un one-liner, sino que se puede meter en un pequeño programita.

D.


Editado: De hecho los separadores son tabuladores, así que, ¡perfecto!
danusol
Perlero nuevo
Perlero nuevo
 
Mensajes: 46
Registrado: 2010-04-22 07:08 @339

Re: Eliminar "padding" de archivo .SAM

Notapor explorer » 2012-03-09 10:01 @459

Bueno, la transformación de mini-programa a parte de un programa mayor, es fácil... ya ves que hay un bucle, que tiene un next(), y luego hay que hacer un split() en la línea, y que modificamos el campo número 5, y finalmente, rehacemos la línea con el join().
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Bioinformática

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados

cron