(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/