Pues bien, esos parámetros se separan por tabulaciones y lo que quiero es coger el primer valor como clave para un hash y los valores 4 y 5 (3 y 4 empezando de 0) como valores de esa clave. Y después mostrarlos ordenando de mayor a menor en función de restar al valor 5 el valor 4. Me explico, en el archivo cogeríamos esto:
- Código: Seleccionar todo
Valor 1 valor 4 valor5 resta (la resta la hace el programa)
nombre1 40 100 60
nombre2 200 500 300
nombre3 400 480 80
entonces nos saldría así:
- Código: Seleccionar todo
nombre2 200 500
nombre3 400 480
nombre1 40 100
Bien, yo mirando el foro y así, he sacado esto...
Using perl Syntax Highlighting
my $file = $ARGV[0];
open (IN, "$file") or die ("cannont open the file \n");
my %hash;
while (<IN>) {
chomp;
my @v = split (/\s+/,$_);
my @lista;
push (@lista, $v[3]);
push(@lista,$v[4]);
my $lista_ref = $v[4]-$v[3];
push(@lista,$lista_ref]);
push (@{$hash{$v[0]}}, $lista);
}
foreach my $chr (keys %hash) {
my @sorted_exons = sort {abs($b ->[2]) <=> abs($a -> [2])} @{$hash{$chr}};
foreach my $exon (@sorted_exons) {
print ("$exon\n");
}
}
open (IN, "$file") or die ("cannont open the file \n");
my %hash;
while (<IN>) {
chomp;
my @v = split (/\s+/,$_);
my @lista;
push (@lista, $v[3]);
push(@lista,$v[4]);
my $lista_ref = $v[4]-$v[3];
push(@lista,$lista_ref]);
push (@{$hash{$v[0]}}, $lista);
}
foreach my $chr (keys %hash) {
my @sorted_exons = sort {abs($b ->[2]) <=> abs($a -> [2])} @{$hash{$chr}};
foreach my $exon (@sorted_exons) {
print ("$exon\n");
}
}
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4
Y el problema ahora es que donde el print ("$exon\n"), no consigo poner para que salga $clave $valor0 $valor1, es decir, pensaba en hacer un while ($clave, @valor) = each (%hash) e ir sacando, pero donde valor, lo que me muestra es ARRAY234fc93 y así.
Así que me toca probar a ver si alguno sabría decirme. Muchas gracias de antemano.
Yo tengo que sacar así:
- Código: Seleccionar todo
Clave Valor Valor