• Publicidad

Rearreglar columnas

Perl aplicado a la bioinformática

Rearreglar columnas

Notapor abraham03 » 2018-01-10 02:22 @140

Hola, quisiera saber cómo hacer un rearreglo de columnas a partir de un array.

Lo que tengo es algo así (es a partir de un archivo de asignaciones taxonómicas):

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
  1. #name value1 value2 value3 valueN
  2. name1     9          5           3           9
  3. name2     4          7           2           17
  4. name3    12         3           7           7
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

y lo que quiero es algo así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
  1. #name            value
  2. value1_name1 9
  3. value2_name1 5
  4. value3_name1 3
  5. valueN_name1 9
  6. value1_name2 4
  7. value2_name2 7
  8. value3_name2 2
  9. valueN_name2 17
  10. value1_name3 12
  11. value2_name3 3
  12. value3_name3 7
  13. valueN_name3 7
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

El número de columnas correspondiente a los valores numéricos siempre es variable, pueden ser unos cuanto o cientos, y quiero imprimirlos separados por un tabulador. ¿Alguien me podría explicar cómo proceder a partir de un array?
¡¡Gracias!!
abraham03
Perlero nuevo
Perlero nuevo
 
Mensajes: 19
Registrado: 2016-08-05 15:52 @703

Publicidad

Re: Rearreglar columnas

Notapor explorer » 2018-01-10 07:33 @356

Bueno, esto lo puedes hacer con un solo bucle.

Abres el archivo, lees la primera línea, donde están los nombres de las columnas, y las guardas en un array.
Luego, inicias un bucle hasta el final del archivo. Por cada línea, los separas por campos (con split()), y por cada elemento, haces la composición de las dos columnas que tienes que mostrar. Recorres los campos con un valor de índice, que usarás para acceder al elemento correspondiente en el primer array.

Es algo así (no probado):
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use autodie;
  2. open my $ARCHIVO, '<', $archivo;
  3.  
  4. my $linea = <$ARCHIVO>;                                 # leer cabecera
  5. chomp $linea;
  6. my (undef, @nombres_valores) = split " ", $linea;       # sacamos el nombre de las columnas, excepto la primera, que no nos interesa
  7.  
  8. while ($linea = <$ARCHIVO>) {                           # para el resto de líneas
  9.     chomp $linea;
  10.  
  11.     my @campos = split " ", $linea;                     # dividimos (suponemos que no falta ninguna columna)
  12.  
  13.     for my $i (1 .. $#campos) {                         # para todas las columnas, a partir de la segunda
  14.  
  15.         print $nombres_valores[$i] . '_' . $campos[0] . " " . $campos[$i] . "\n";
  16.     }
  17. }
  18.  
  19. close $ARCHIVO;
Coloreado en 0.004 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: 14480
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 1 invitado