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 :

Script awk pour la moyenne mobile


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 14
    Par défaut Script awk pour la moyenne mobile
    bonjour,

    Je suis nouveau sur Linux je cherche à faire un script pour calculer la moyenne mobile pour chaque 10 valeurs en éliminant la valeur -9999.00.
    voici mon script

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk '{{if(NR==1) lg=0; sum !=0}; if($2 !=-9999.00) {lg+=1; sum+=$2}; if(NR==10)  print sum/lg}' fafa

    le problème ; ce script il me donne la moyenne que de 10 valeurs premier

    Est ce vous pouvez me dire c'est quoi mon erreur
    merci d'avance

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 662
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 662
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 351
    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 351
    Par défaut
    Bonjour,

    Pas trop compris ta question, mais quelque petits détails sur awk:
    le bloc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {if(NR==1) lg=0; sum !=0}
    Tu peux le remplacer par un principe awk plus standard (quoique ici, inutile car awk par défaut initialise les variables à 0):
    Enfin pour le sum, je suppose que tu as fais une typo...
    le bloc suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     if($2 !=-9999.00) {lg+=1; sum+=$2}
    Sera bien executé pour les lignes ne contenant ou le champs 2 est différent de -9999.00 mais simplifiable par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $2 !=-9999.00 {lg+=1; sum+=$2}
    Après la partie qui doit certainement te poser problème est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(NR==10) print sum/lg
    ou tu lui dis d'afficher le résultat de sum/lg quand tu es sur la ligne 10.
    Si ton but était de prendre en compte tout le fichier et pas uniquement les 10 premières ligne, il y a aussi un principe de base sous awk pour cela:Donc en consolidant, cela donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk 'BEGIN{lg=0;sum=0}{if($2 !=-9999.00) {lg+=1; sum+=$2}}END{print sum/lg}' fichier
    ou plus simplement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk '$2 !=-9999.00 {lg+=1; sum+=$2}END{print sum/lg}' fichier
    PS: J'ai pas testé les code mais cela devrait être bon (à la typo près ).

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 293
    Par défaut
    Bonjour,

    Je vois plutôt la moyenne mobile comme une suite de moyennes sur des intervalles qui se chevauchent.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    $ cat moyenne_mobile.txt 
    30
    63
    52
    41
    93
    32
    65
    75
    86
    42
    15
    96
    32
    54
    85
    69
    25
    33
    24
    67
    98
    75
    $ awk '{sum -= mem[NR%10]; mem[NR%10]=$1; sum += $1} (NR>9){print sum/10}' moyenne_mobile.txt 
    57.9
    56.4
    59.7
    57.7
    59
    58.2
    61.9
    57.9
    53.7
    47.5
    50
    58.3
    56.2
    53
    $

  5. #5
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 14
    Par défaut
    bonjour,

    ce que je cherche c d' avoir une moyenne pour chaque intervalle de 10 valeur

    le scripte suivent

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ awk '{sum -= mem[NR%10]; mem[NR%10]=$1; sum += $1} (NR>9){print sum/10}' moyenne_mobile.txt
    me donne la moyenne sur des intervalles mais chevauchent

    et Mercie beaucoup

  6. #6
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 662
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 662
    Par défaut
    un exemple de fichier à traiter, et de la sortie correspondante attendue seraient plus parlant !
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 293
    Par défaut
    La réponse a déjà été donnée: il faut remplacer la condition NR>9 par NR%10==0

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

Discussions similaires

  1. Requete pour une moyenne mobile
    Par camcam8782 dans le forum NoSQL
    Réponses: 0
    Dernier message: 17/04/2015, 17h09
  2. Script AWK pour calculer le délai et le débit
    Par ahlamNS2 dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 29/03/2014, 21h49
  3. Script AWK pour modifier un fichier
    Par leanima dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 13/04/2012, 12h49
  4. script awk pour determiner valmax
    Par maolivar dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 17/07/2008, 16h35
  5. Script AWK pour fichiers xyz
    Par Frankii dans le forum Linux
    Réponses: 4
    Dernier message: 26/07/2007, 21h57

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