Forum Programmation.shell Tableau en bash shell

Posté par  .
Étiquettes : aucune
0
19
mar.
2007
Bonjour,

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  . Évalué à 1.

    Cà devrait être assez simple à faire en utilisant awk :
    http://www.linuxfocus.org/Francais/September1999/article103.(...)
    • [^] # Re: awk

      Posté par  (site web personnel) . É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\

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.