IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Trouver et calculer une moyenne


Sujet :

Shell et commandes GNU

  1. #1
    Membre à l'essai
    Homme Profil pro
    Doctorant
    Inscrit en
    Février 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Doctorant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 19
    Points : 15
    Points
    15
    Par défaut Trouver et calculer une moyenne
    Bonjour,

    J'ai un fichier qui contient:

    UserPosition X [at 168.096] -95.0692
    UserPosition Y [at 168.096] 865.816
    sinr: 16.8291 13.1011 -2.99972 15.4744 14.6714 7.47945 10.4429 6.6317 17.5024 12.6506 8.29669 10.2392 -2.97902 13.0284 4.43287 14.2003 14.559 -8.38482 11.4168 14.5657 9.06081 7.23694 17.2067 15.0813 13.9533

    UserPosition X [at 168.097] -95.0722
    UserPosition Y [at 168.097] 865.808
    sinr: 16.7237 13.0435 8.96009 16.2947 16.4854 11.803 11.4026 10.722 17.4564 13.7576 -4.0238 10.178 10.7893 13.0216 12.76 13.9621 14.9412 10.6273 11.3787 14.7775 10.443 4.2944 17.2706 15.1262 13.5008
    je veux le résultat de la moyenne du sinr pour chaque temps

    168.096 moyenne du sinr
    168.097 moyenne du sinr

    tous ça dans un fichier out

    Merci d'avance

  2. #2
    Membre à l'essai
    Homme Profil pro
    Doctorant
    Inscrit en
    Février 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Doctorant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 19
    Points : 15
    Points
    15
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep "sinr" $file_in | awk ' {v+=$2;count++} END{print v/count}' >$file_out
    mais ici il fait juste une moyenne de la colonne 2

  3. #3
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 278
    Points : 12 726
    Points
    12 726
    Par défaut
    Bonjour,
    Rien compris à ton problème, les inputs ne correspondent à tes outputs, soit plus précis sur ton besoin, car là tu nous demande de coder pour toi, donc la moindre des choses est d'être claire et de donner des exemples explicites avec des calculs.

    Ton exemple de awk ne reflète pas du tout ton besoin.
    Cordialement.

  4. #4
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Bonjour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep "sinr" $file_in | awk ' {v+=$2;count++} END{print v/count}' >$file_out
    Je ne sais pas en quoi ton script répond à ta question, mais je peux te donner une simplification évidente de ce que tu as écrit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk ' /sinr/{v+=$2;count++} END{print v/count}' "$file_in" > "$file_out"
    Ensuite, tu peux penser à une boucle sur les champs de la ligne "sinr".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    count=0;total=0;for (i=2;i<=NF;i++) {total += $i;count ++;}
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Doctorant
    Inscrit en
    Février 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Doctorant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 19
    Points : 15
    Points
    15
    Par défaut
    OK je vais simplifier les choses

    soit un fichier nommé "file_IN" qui contient:

    sinr: 16.8291 13.1011 -2.99972
    sinr: 8.291 1.011 9.972
    sinr: 2.91 3.11 -14.2
    le résultat est d'avoir une moyenne des trois champs de chaque ligne ---> ($1+$2+$3)/3

    ligne1=($1+$2+$3)/3
    ligne2=($1+$2+$3)/3
    ligne3=($1+$2+$3)/3

    ça pour un premier temps,

    maintenant je veux faire une recherche du mot "sinr" dans le fichier "file_IN" ()
    ensuite faire la moyenne de cette ligne ($1+$2+$3)/3
    les résultats sont stockés dans un fichier nommé "file_out"

  6. #6
    Membre à l'essai
    Homme Profil pro
    Doctorant
    Inscrit en
    Février 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Doctorant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 19
    Points : 15
    Points
    15
    Par défaut
    je ne sais pas si on peut combiner awk et for

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    file_in=IN
    file_out=OUT
    grep "sinr:" ${file_in} | awk 'count=0;total=0;for (i=2;i<=NF;i++) {total += $i;count ++;} END{print total/count}' > ${file_out}

  7. #7
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    salut,

    c'est ce que te dit Flodelarab plus haut.

    ton besoin c'est donc "pour chaque ligne où le mot 'sinr' apparait, faire la moyenne des valeurs sur cette ligne"

    le code awk correspondant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk '/sinr/ {for(i=2; i<=NF; i++){total+=$i};print total/(NF-1)}' fichier

  8. #8
    Membre à l'essai
    Homme Profil pro
    Doctorant
    Inscrit en
    Février 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Doctorant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 19
    Points : 15
    Points
    15
    Par défaut
    Merci à tous pour vos réponses,
    ça marche sauf que il faut initialiser total à 0 pour qu'il puisse faire chaque ligne ca moyenne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk '/sinr/ {total=0;for(i=2; i<=NF; i++){total+=$i};print total/(NF-1)}' fichier

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Calculer une moyenne sans division
    Par mia123 dans le forum Assembleur
    Réponses: 22
    Dernier message: 13/03/2013, 14h47
  2. Calculer une moyenne avec des jours absents
    Par guidav dans le forum Langage SQL
    Réponses: 7
    Dernier message: 25/01/2008, 09h35
  3. Calculer une moyenne avec une matrice
    Par progfou dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 05/06/2006, 16h47
  4. methode qui calcul une moyenne du traffic
    Par siry dans le forum Développement
    Réponses: 7
    Dernier message: 05/05/2005, 17h16
  5. calculer une moyenne avec une requete externe
    Par allowen dans le forum Langage SQL
    Réponses: 3
    Dernier message: 27/01/2005, 16h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo