Je 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.
# awk
Posté par Colargol . Évalué à 1.
http://www.linuxfocus.org/Francais/September1999/article103.(...)
[^] # Re: awk
Posté par BAud (site web personnel) . Évalué à 3.
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\
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.