Interpretación de resultados múltiples
Publicado: 2013-03-04 09:03 @419
Hola a todos,
Necesito ayuda con la interpretación de unos resultados complejos.
Tengo encadenados los resultados de un programa y he de extraer solo dos datos de cada informe individual que se repite modularmente miles de veces (os pongo un ejemplo del formato):
De cada uno de estos módulos he de extraer los valores de los campos "Sequence:" y "HitCount:".
He hecho analizadores otras veces antes (gracias a lo aprendido en este foro, todo hay que decirlo), pero en éste me he atascado en los bucles y no consigo pasar los valores de los campos que busco a un array (que luego imprimiré si se cumple una condición).
Aquí os pongo el código (que se explicará mejor por sí mismo).
Seguro que es una tontería muy básica, pero yo llevo un rato laaaaargo con ello y ya no sé que más probar...
Muchas gracias por adelantado
Necesito ayuda con la interpretación de unos resultados complejos.
Tengo encadenados los resultados de un programa y he de extraer solo dos datos de cada informe individual que se repite modularmente miles de veces (os pongo un ejemplo del formato):
Using text Syntax Highlighting
########################################
# Program: predicter
# Rundate: Wed 27 Feb 2013 23:42:03
# Commandline: predicter
# -sequence ../Genes/NM_001163474.txt
# -minrepeat 5
# -maxrepeat 100
# -outfile NM_001163474.out
# Report_format: table
# Report_file: NM_001163474.out
########################################
#=======================================
#
# Sequence: NM_001146075.1 from: 1 to: 3585
# HitCount: 1
#
# Threshold: 20
# Minrepeat: 5
# Maxrepeat: 100
# Mismatch: No
# Uniform: No
#
#=======================================
Start End Strand Score Size Count Identity Consensus
22 87 + 20 22 3 81.8 gcggggctgagcgtgagtcact
#---------------------------------------
#---------------------------------------
# Program: predicter
# Rundate: Wed 27 Feb 2013 23:42:03
# Commandline: predicter
# -sequence ../Genes/NM_001163474.txt
# -minrepeat 5
# -maxrepeat 100
# -outfile NM_001163474.out
# Report_format: table
# Report_file: NM_001163474.out
########################################
#=======================================
#
# Sequence: NM_001146075.1 from: 1 to: 3585
# HitCount: 1
#
# Threshold: 20
# Minrepeat: 5
# Maxrepeat: 100
# Mismatch: No
# Uniform: No
#
#=======================================
Start End Strand Score Size Count Identity Consensus
22 87 + 20 22 3 81.8 gcggggctgagcgtgagtcact
#---------------------------------------
#---------------------------------------
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
De cada uno de estos módulos he de extraer los valores de los campos "Sequence:" y "HitCount:".
He hecho analizadores otras veces antes (gracias a lo aprendido en este foro, todo hay que decirlo), pero en éste me he atascado en los bucles y no consigo pasar los valores de los campos que busco a un array (que luego imprimiré si se cumple una condición).
Aquí os pongo el código (que se explicará mejor por sí mismo).
Seguro que es una tontería muy básica, pero yo llevo un rato laaaaargo con ello y ya no sé que más probar...
Using perl Syntax Highlighting
- #!usr/bin/perl
- use strict;
- use Getopt::Long;
- use Spreadsheet::WriteExcel;
- #usage: perl script.pl -i [infile] -h [cutoff value]
- my ( $file, $cutoff );
- GetOptions(
- 'infile=s' => \$file,
- 'hits=i' => \$cutoff,
- );
- open( INFILE, "$file" ) or die("ERROR: $!\n");
- chomp( my @data = <INFILE> );
- #print "Enter your cut-off e-value\n";
- #chomp(my $evalue = <STDIN>);
- open SALIDA, ">Parsed_results.txt" or die("ERROR: $!\n");
- # Create a new workbook and add a worksheet
- my $tabla = "$^T" . "Results_parsed";
- my $workbook = Spreadsheet::WriteExcel->new( "$tabla" . ".xls" );
- my $worksheet = $workbook->add_worksheet();
- my $fila = 1;
- my @header = ( "Query Seq.", "hits", "evalue" );
- &ex_print( $worksheet, @header );
- my @TM = ();
- for (@data) {
- if ( /^\#\sProgram/ .. /^\#\sUniform/ ) {
- my ( $sequence, $hitcount );
- if (/^\#\sSequence\:\s(\w+)/)
- { #->"sequence", la regex lo captura lo pasa al array, pero luego es reemplazado por $hitcount
- $sequence = $1;
- print "Sequence: $sequence\n";
- push @TM, $sequence;
- #print SALIDA "$sequence\t";
- if (/HitCount\:\s(\d+)/) { #->hitcount, la regex lo captura pero no lo pasa al array
- $hitcount = $1;
- print "Hitcount: $hitcount\n";
- push @TM, $hitcount;
- #print SALIDA "$hitcount\n";
- print "@TM\n";
- if ( $TM[1] >= $cutoff ) {
- push @TM, $sequence;
- push @TM, $hitcount;
- #print SALIDA "$sequence\t$hitcount\n";
- #print "$sequence\t$hitcount\n";
- print SALIDA "@TM\n"; #####->No me escribe nada
- &ex_print( $worksheet, @TM );
- }
- }
- }
- @TM = (); #reinicialización
- }
- }
- close INFILE;
- close SALIDA;
- ####################Subroutines####################
- sub ex_print {
- my ( $worksheet, @TM ) = @_;
- $worksheet->write_row( "A" . "$fila", \@TM );
- $fila++;
- }
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4
Muchas gracias por adelantado