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