Retourner aux forums || Retourner au forum Programmation.shell

Programmation.shell : Tableau en bash shell

Posté par dubis () le 19 mars 2007
0
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.

> Lire le message (2 commentaires, moyenne: 2).  

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.

awk

Posté par Jérôme Villafruela () le 19/03/2007 à 19:33. (lien). Évalué à 1.

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