Página 1 de 1

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

NotaPublicado: 2011-01-24 12:08 @547
por wampaier
¿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!

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

NotaPublicado: 2011-01-24 12:42 @571
por explorer
Es algo que puedes resolver muy fácilmente, con hash. ¿Lo has probado?

contador en formato tabular

NotaPublicado: 2011-01-24 13:18 @596
por wampaier
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.002 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!! :(

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

NotaPublicado: 2011-01-24 15:06 @671
por explorer
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.001 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

necesito ayuda con un archivo

NotaPublicado: 2011-01-26 09:42 @446
por wampaier
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!!!

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

NotaPublicado: 2011-01-26 10:47 @491
por explorer
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.