• Publicidad

Sumar valores de una columna

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Sumar valores de una columna

Notapor davids84 » 2011-05-27 08:21 @390

Hola, ¿qué tal...?

¿Cómo puedo hacer una suma de valores de una columna con respecto a otra columna, siempre y cuando el valor de columna 2 sea el mismo...? Por ejemplo:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
  1. 172     IGHV9-4-01
  2. 2       IGHV9-4-01
  3. 3       IGHV9-4-01
  4. 4       IGHV9-3-1-01
  5. 11      IGHV9-3-01
  6. 954     IGHV9-3-01
  7. 3       IGHV9-3-01
  8. 1       IGHV9-3-01
  9. 1       IGHV9-3-01
  10. 242     IGHV9-1-01
  11. 1       IGHV9-1-01
  12.  
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

esto es parecido a mi archivo de entrada... la salida sería de este modo:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
  1. 5       IGHV9-4-01
  2. 4       IGHV9-3-1-01
  3. 970     IGHV-3-01
  4. 243     IGHV9-1-01
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


¿¿¿Alguna opinión???

Esto es código que tengo... pero no me hace la suma...

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. open my $fh, $ARGV[0] or die "No se puede abrir el archivo\n";
  2.  
  3. my($segmento,$total,$total1);
  4.  
  5. while (<$fh>) {
  6.  
  7.           if (/(.+)\t(.+)\n/){
  8.               if ($segmento) {
  9.                   print "$segmento\t$total\n";
  10.               }
  11.               $total = $1;
  12.               $segmento = $2;
  13.           }
  14.  
  15.       }
  16.  
  17.  
  18.       if ($segmento eq $segmento) {
  19.         $total1 = $total + $total;
  20.           print "$segmento\t$total1\n";
  21.       }
  22.       close $fh;
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


¡¡¡¡Saludos!!!!
¡¡¡¡¡Gracias!!!!!
davids84
Perlero nuevo
Perlero nuevo
 
Mensajes: 20
Registrado: 2011-01-27 13:14 @593

Publicidad

Re: Sumar valores de una columna

Notapor explorer » 2011-05-27 11:51 @535

El problema se soluciona de forma fácil usando hash.

Otra opción sería mantener una variable con el contenido de la segunda columna, y cuando hubiese un cambio, sacar la suma acumulada del primero. Para el resto de líneas, solo hay que sumar la primera columna en el acumulador.

Cosas como esta:
if ($segmento eq $segmento) {

indican que no te has planteado bien la solución... ¿has intentado resolver el problema antes con lápiz y papel? Si no, no hubieras puesto una condición que siempre se cumple ($segmento siempre es igual a sí mismo, contenga lo que contenga).
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 Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado

cron