(Courriels de diversion: <fangeux@correctionnel-frotteurs.com> <redoubleront@reluiraient-accouplerons.com> <punissable@merlan-ambitionnes.com> <sursauterons@fonctionne-sous-secretaire.com> <eclatons@erigeant-synchronise.com> <assoyez@encartees-enregimentant.com> <decouleraient@essaimeras-reactualiserions.com> <deplaisions@concertez-verrouilleraient.com> <empaquettera@surregenerateur-invertebre.com> <vacants@copieurs-demandeuse.com> )


On Fri, Nov 20, 1998 at 10:40:30AM +0100, Jerome Gasperi wrote:
> 
> Salut,
> 
> J'ai trouve la reponse a mon probleme awk. Here it is:
> 
> 
> BEGIN	{
> 	test0=0;
> 	mom0=0;
> 	tot0=0;

  Pour ma part, je suis partisan des variables explicites :)

> 	}
> {
> 	test=$1;
> 	mom=$2;
> 	if (test == test0){

  Bon, et si la première ligne a comme premier champ 0 ? Que se passera-t-il ?

> 		mom0=mom+mom0;
> 		tot0=tot0+mom;
> 	}
> 	if (test != test0){
> 		print test0,mom0,tot0;
> 		test0=test;
> 		mom0=mom;
> 		tot0=tot0+mom0;
> 	}
> }

  Et là, à mon avis, la dernière ligne n'est jamais traitée, il te faudrait
une clause END.

> Ca donne:
> 
> input       output
> 
> 1  1        1  1  1
> 2  1        2  2  3
> 2  1        3  1  4
> 3  1         ....
> ...

  Bon, je soumets ma version, histoire de me faire corriger un peu :

#!/usr/bin/awk -f
BEGIN { premiereligne=1; sommedroite=0; }
{  if (premiereligne==1) {
    # traiter le cas de la première ligne ici
    derniere=$1; sommedroite=$2; premiereligne=0;
  } else {
    # ce n'est plus la première ligne
    if ($1==derniere) {
      # on retrouve un premier champ identique, on ajoute
      sommedroite+=$2;
    } else {
      # ce n'est plus le même premier champ, affiche et met à jour
      printf("%d  %d\n",derniere,sommedroite);
      derniere=$1;
      sommedroite=$2;
    }
  }
}
END {
  # et traiter la dernière ligne là
  printf("%d  %d\n",derniere,sommedroite);
}

--
  Yannick
-
Le CULTe sur le ouebe > http://savage.iut-blagnac.fr/
La page de linux-31 > http://savage.iut-blagnac.fr/linux-31/