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 :

Ecart type avec awk


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    Inscrit en
    Février 2011
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2011
    Messages : 176
    Par défaut Ecart type avec awk
    Salut,

    j'ai voulu utiliser awk pour calculer la moyenne et l'écart type ( sqrt de la variance) de chaque champ , voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     awk '{ pp+= $2;var1+= $3;var2+= $4;oov+= $5 } END { print $h,"fr",pp/NR,var1/NR,var2/NR,oov/NR}' fich > ppfr  #moy
     
    awk '{ ps+= $2;pp+= $2*$2;2gs+= $3;2gp+= $3*$3;1gs+= $4;1gp+= $4*$4;oovs+= $5;oovp+= $5*$5} END { print $h,"fr",sqrt(pp-(ps/NR)*(ps/NR)),sqrt(2gp-(2gs/NR)*(2gs/NR)),sqrt(1gp-(1gs/NR)*(1gs/NR)),sqrt(oovp -(oovs/NR)*(oovs/NR))}' fich >>ppfr  #std
    j'ai cette erreur de syntaxe :
    awk: { ps+= $2;pp+= $2*$2;2gs+= $3;2gp+= $3*$3;1gs+= $4;1gp+= $4*$4;oovs+= $5;oovp+= $5*$5} END { print $h,"fr",sqrt(pp-(ps/NR)*(ps/NR)),sqrt(2gp-(2gs/NR)*(2gs/NR)),sqrt(1gp-(1gs/NR)*(1gs/NR)),sqrt(oovp -(oovs/NR)*(oovs/NR))}
    awk: ^ syntax error
    Est ce vous pouvez me dire c'est quoi mon erreur , je débute avec awk
    merci d'avance

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Par défaut
    Les variables awk ne peuvent commencer par [0-9]. Ta variable 2gp produit logiquement une erreur.

    nb: Pourquoi passer deux fois dans le fichier? Un seule fois devrait suffire pour calculer la moyenne et la variance non?

  3. #3
    Membre très actif
    Profil pro
    Inscrit en
    Février 2011
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2011
    Messages : 176
    Par défaut
    oui c'est ça ma faute
    Les variables awk ne peuvent commencer par [0-9]
    oui c'est juste je testais chaque resultat à part pour vérifier

    Merci pour votre aide

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Par défaut
    Ton code peut s'optimiser. Il me semble que tu te compliques la vie pour rien.

    Exemple, fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var1 1 5 8
    var2 2 4 5 1
    var3 52 18 16 68 18 16 76
    Calcul de la moyenne et écart-type pour chaque ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk '{t=v=s=0;for(i=2;i<=NF;i++) t+=$i; m=t/(NF-1); for(i=2;i<=NF;i++) s+=($i-m)^2; print $1,m,sqrt(s/(NF-1))}' fichier
    Sortie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var1 4.66667 2.86744
    var2 3 1.58114
    var3 37.7143 24.8062
    Tout est calculé en une passe. Économie de temps et de ressources, surtout pour de gros fichiers.

  5. #5
    Membre très actif
    Profil pro
    Inscrit en
    Février 2011
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2011
    Messages : 176
    Par défaut
    c'est bien ça , il est "fort" awk

    Mais je dois faire le calcul de la moyenne et écart-type pour chaque colonne
    ça change , je dois parcourir tt les lignes pour chaque colonne ??

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk '{t=v=s=0;for(j=2;j<=NF;j++) {for(i=1;i<=NR;i++) t+=$j; m=t/(NR)};for(j=2;j<=NF;j++){for(i=1;i<=NR;i++) s+=($j-m)^2}; print m,sqrt(s/(NR))}'

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Par défaut
    Montre-nous un extrait du fichier d'entrée. s'il est organisé en colonnes, la logique est différente.

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

Discussions similaires

  1. Ecart type avec condition
    Par Maady dans le forum Excel
    Réponses: 7
    Dernier message: 22/10/2018, 17h47
  2. [Débutant] nuage de points avec ecarts types ?
    Par membreComplexe12 dans le forum MATLAB
    Réponses: 3
    Dernier message: 05/11/2011, 00h59
  3. Réponses: 5
    Dernier message: 06/08/2008, 16h40
  4. Probleme avec awk et type de variables
    Par canaboss dans le forum Linux
    Réponses: 6
    Dernier message: 16/04/2008, 20h04
  5. Réponses: 2
    Dernier message: 01/04/2003, 22h09

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