Retourner aux forums || Retourner au forum Programmation.shell
Programmation.shell : Tableau en bash shell
Posté par dubis () le 19 mars 2007Je suis débutant sur le bash shell, et je recherche une méthode pour exploité un resultat. Le résultat suivant est déjà issu d'un fichier que j'ai traité avec un script :
toto 0.0% 0.0%
toto 0.0% 0.2%
toto 0.0% 0.6%
toto 0.1% 0.0%
toto 0.1% 0.1%
toto 0.1% 0.3%
toto 0.1% 0.5%
tata 0.3% 0.0%
bibi 0.0% 0.0%
bibi 0.1% 0.0%
bibi 0.1% 0.1%
bibi 0.1% 0.3%
bibi 0.3% 0.0%
lolo 0.4% 0.0%
lolo 0.4% 1%
lola 0.0% 0.0%
lola 0.1% 0.0%
lola 0.1% 0.1%
lola 0.1% 0.2%
J'aimerais faire apparaître ce résultat dans un tableau avec le résultat moyen des 2 dernières colonnes et une ligne par utilisateur naturellement.
Je pense qu'il faut faire une boucle mais laquelle ?
Merci de votre aide.
> Lire le message (2 commentaires, moyenne: 2).
awk
Cà devrait être assez simple à faire en utilisant awk :
http://www.linuxfocus.org/Francais/September1999/article103.(...)
-
[^]Re: awk
Posté par baud123 (Jabber id, page perso, ) le 20/03/2007 à 07:08. (lien). Évalué à 3.le bon lien : http://www.linuxfocus.org/Francais/September1999/article103.(...) (avec html à la fin)
et http://robert.wsi.edu.pl/awk/start.html devrait être un peu plus complet pour utiliser gawk
sinon j'ai modifié ton fichier en entrée en l'appelant tableau.txt pour enlever les % et les . qui ne sont généralement pas bien gérés en bash (ni en gawk...), en multipliant par 10 (ça donne des pour mille au lieu de % quoi...)
le résultat :
beginning
user=toto total1=4 nb1=7 total2=17 val1=0,571429 val2=2,42857 nb_user=1
user=tata total1=6 nb1=1 total2=0 val1=6 val2=0 nb_user=2
user=bibi total1=6 nb1=5 total2=4 val1=1,2 val2=0,8 nb_user=3
user=lolo total1=12 nb1=2 total2=10 val1=6 val2=5 nb_user=4
user=lola total1=3 nb1=4 total2=3 val1=0,75 val2=0,75 nb_user=5
nb_user=5
gawk 'BEGIN { nb_user=0 ; user_curr="unknown" ; total1=0 ; total2=0 ; nb1=0 ; } \
( $1!=user_curr ) { \
if (nb_user > 0) { \
print "user=" user_curr " total1=" total1 " nb1=" nb1 " total2=" total2 " val1=" total1 * 1.0 / nb1 " val2=" total2 * 1.0 / nb1 " nb_user=" nb_user ; \
} else { \
print "beginning" ; \
} \
user_curr=$1 ; \
nb_user++; \
total1=$2 ; \
total2=$3; \
nb1=0; \
}\
( $1==user_curr ) { \
total1 +=$2 ; total2 +=$3 ; nb1++; \
} \
END { \
print "user=" user_curr " total1=" total1 " nb1=" nb1 " total2=" total2 " val1=" total1 * 1.0 / nb1 " val2=" total2 * 1.0 / nb1 " nb_user=" nb_user ; \
print "nb_user=" nb_user ; }' tableau.txt
(dommage l'indentation ne passe pas du tout /o\
Revenir en haut de page || Retourner aux forums || Retourner au forum Programmation.shell



Cette discussion est archivée, il n'est plus possible de laisser des commentaires.
Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.