• Publicidad

Analizar un archivo y contar cuántas veces aparece un contig

Perl aplicado a la bioinformática

Analizar un archivo y contar cuántas veces aparece un contig

Notapor wampaier » 2011-01-24 12:08 @547

¿Qué tal? Quisiera ver si me pueden ayudar con este pequeño problema...
Tengo este archivo:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
GPJFHIG01AN7BW  Assembled       contig00764     69      -       contig00748     3       -
GPJFHIG01D3PF6  Assembled       contig00645     650     +       contig00009     710     -
GPJFHIG01ADJDG  Assembled       contig00764     490     +       contig00674     586     -
GPJFHIG01CEBKL  Singleton
GPJFHIG01ECQ6L  Singleton
GPJFHIG01CS9M0  Assembled       contig00645     186     +       contig00645     273     -
GPJFHIG01CDL5X  Assembled       contig00764     580     -       contig00690     75      +
GPJFHIG01AZUS9  Singleton
GPJFHIG01BHOJ5  Assembled       contig00645     146     +       contig00645     278     -
GPJFHIG01AHBGC  TooShort
GPJFHIG01B6LGY  PartiallyAssembled      contig02291     359     +       contig02120     429     -
GPJFHIG01BYVHE  Assembled       contig00764     606     +       contig00887     1351    -
GPJFHIG01A3SC0  Singleton
GPJFHIG01EL8H3  Singleton
GPJFHIG01EA3CQ  Assembled       contig00645     832     +       contig00499     938     -
GPJFHIG01AUENU  TooShort
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Es un archivo en formato tabular y en la columna 3 aparece la palabra contigxxxxx. Quisiera que contara cuántas veces aparece cada contig.... por ejemplo:

contig00645 4

¡Saludos!
wampaier
Perlero nuevo
Perlero nuevo
 
Mensajes: 66
Registrado: 2008-08-12 12:50 @576

Publicidad

Re: Analizar un archivo y contar cuántas veces aparece un contig

Notapor explorer » 2011-01-24 12:42 @571

Es algo que puedes resolver muy fácilmente, con hash. ¿Lo has probado?
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

contador en formato tabular

Notapor wampaier » 2011-01-24 13:18 @596

Tengo este programa que me busca cuantas veces encuentra la palabra contig00001

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use strict;
  3.  
  4. my $archivo = '454ReadStatus.txt';
  5. open (FILE, $archivo) || die "$!\n";
  6. my @content = <FILE>;
  7. close(FILE);
  8.  
  9. my $i;
  10. foreach (@content) {
  11.              $i++ if ($_ =~ /contig00001/);
  12. }
  13. print "contig00001\t$i\n";
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


pero no sé cómo hacerle para que me lo haga "X" número de veces (digamos para 300 contigs) que vaya en incremento.

¡¡Me podrían ayudar por favor!! :(
wampaier
Perlero nuevo
Perlero nuevo
 
Mensajes: 66
Registrado: 2008-08-12 12:50 @576

Re: Analizar un archivo y contar cuántas veces aparece un contig

Notapor explorer » 2011-01-24 15:06 @671

Te vale con usar una expresión regular que mire si la tercera columna comienza por contig.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use diagnostics;
  5.  
  6. my %contig;
  7.  
  8. while (<DATA>) {
  9.  
  10.     my $contig_de_la_linea = (split " ")[2];
  11.    
  12.     if ($contig_de_la_linea  and  $contig_de_la_linea =~ /^contig/) {
  13.    
  14.         $contig{$contig_de_la_linea}++;
  15.     }
  16. }
  17.  
  18. for my $contig (keys %contig) {
  19.  
  20.     print "$contig $contig{$contig}\n";
  21. }
  22.  
  23. __DATA__
  24. GPJFHIG01AN7BW  Assembled       contig00764     69      -       contig00748     3       -
  25. GPJFHIG01D3PF6  Assembled       contig00645     650     +       contig00009     710     -
  26. GPJFHIG01ADJDG  Assembled       contig00764     490     +       contig00674     586     -
  27. GPJFHIG01CEBKL  Singleton
  28. GPJFHIG01ECQ6L  Singleton
  29. GPJFHIG01CS9M0  Assembled       contig00645     186     +       contig00645     273     -
  30. GPJFHIG01CDL5X  Assembled       contig00764     580     -       contig00690     75      +
  31. GPJFHIG01AZUS9  Singleton
  32. GPJFHIG01BHOJ5  Assembled       contig00645     146     +       contig00645     278     -
  33. GPJFHIG01AHBGC  TooShort
  34. GPJFHIG01B6LGY  PartiallyAssembled      contig02291     359     +       contig02120     429     -
  35. GPJFHIG01BYVHE  Assembled       contig00764     606     +       contig00887     1351    -
  36. GPJFHIG01A3SC0  Singleton
  37. GPJFHIG01EL8H3  Singleton
  38. GPJFHIG01EA3CQ  Assembled       contig00645     832     +       contig00499     938     -
  39. GPJFHIG01AUENU  TooShort
  40.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

Sale:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
contig00645 4
contig00764 4
contig02291 1
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
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

necesito ayuda con un archivo

Notapor wampaier » 2011-01-26 09:42 @446

Hola, ¡qué tal...! Tengo un pequeño problema con un archivo de secuencias. Éste es más o menos mi archivo de entrada:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Accno   Read Status     5' Contig       5' Position     5' Strand       3' Contig       3' Position     3' Strand
GPJFHIG01AN7BW  Assembled       contig00764     69      -       contig00748     3       -
GPJFHIG01D3PF6  Assembled       contig00009     650     +       contig00009     710     -
GPJFHIG01ADJDG  Assembled       contig00764     490     +       contig00674     586     -
GPJFHIG01CEBKL  Singleton
GPJFHIG01ECQ6L  Singleton
GPJFHIG01CS9M0  Assembled       contig00764     186     +       contig00645     273     -
GPJFHIG01CDL5X  Assembled       contig00764     580     -       contig00690     75      +
GPJFHIG01AZUS9  Singleton
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

y mi programa me imprime cuántas veces se representa un "contig" (ejemplo contig00764: " este es el contig" 4 "veces que se representa") (esto va en incremento desde el contig00001 hasta contignnnnn) y así sucesivamente. Eso trabaja perfecto. Mi pregunta es cómo le puedo hacer para los contig que no aparecen me imprima el número de contig y el 0 (cero). La salida de mi programa debería ser así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
contig00001 145
contig00002 35
contig00003 0
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

La última línea es lo que me falta.

Este es mi código:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use strict;
  3.  
  4. my $archivo = '454ReadStatus.txt';
  5. open (FILE, $archivo) || die "$!\n";
  6. my @content = <FILE>;
  7. close(FILE);
  8. print "Te muestro las opciones...\n";
  9. print "1.-Lib GPJFHIG01\t2.-Lib GPJFHIG02\t3.-Ambas\n";
  10. print "Teclea una opcion\n";
  11. my $op = <STDIN>;
  12.  
  13. my %Contigs;
  14. my $contig;
  15.  
  16. if ($op == 1) {
  17. foreach (@content) {
  18.          if ($_ =~ /^GPJFHIG01.+(contig\d+)/) {   # \d verifica los digitos y () guarda el valor del contig como contig y el numero
  19.                $Contigs{$1}++;        # hash que va contando el numero de veces que contig y el numero se repiten
  20.          }
  21.  
  22. }
  23.  
  24. open(FILE, ">Libreria1.txt") or die "cannot open result file\n";
  25. # Imprimo el total de READ por Contig
  26. foreach $contig (sort keys %Contigs) {
  27.      
  28.      print FILE "$contig\t$Contigs{$contig}\n";
  29.  
  30. }
  31. close (FILE);
  32. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Se los agradezco de antemano... Si se entiende la pregunta ¿me lo hacen saber, por favor?

Gracias
¡¡¡Saludos!!!
wampaier
Perlero nuevo
Perlero nuevo
 
Mensajes: 66
Registrado: 2008-08-12 12:50 @576

Re: Analizar un archivo y contar cuántas veces aparece un contig

Notapor explorer » 2011-01-26 10:47 @491

Entonces, si en un fichero de entrada, solo existiese el contig00764, ¿quieres imprimir 764 líneas que sean
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
contig00000 0
contig00001 0
contig00002 0
contig00003 0
...
contig00763 0
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

?

Lo que se podría hacer es un bucle for my $cont (0 .. 99999) {} y dentro de él comprobar si existe $Contigs{"contig$cont"}.

Si no existe, es que tenemos que pintarlo con el valor 0.
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