Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/01/2012, 17h08   #1
Modérateur
 
Avatar de gangsoleil
 
R&D en systemes informatiques bas niveau Unix/Linux
Inscription : mai 2004
Messages : 5 485
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : R&D en systemes informatiques bas niveau Unix/Linux

Informations forums :
Inscription : mai 2004
Messages : 5 485
Points : 9 625
Points : 9 625
Par défaut Awk : sommer plusieurs lignes, dont le nombre est variable

Bonjour,

J'ai un fichier contenant plusieurs iterations d'operations ; ce nombre change pour chaque fichier, mais est fixe dans un fichier.
Et pour chaque iteration, je veux faire la somme, et ce avec awk (enfin c'est ce qui semble le plus simple).

Ca sera plus clair avec un exemple :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
INFO : nb_operation 4
Iteration 1 :
pattern=10
pattern=30
pattern=40
pattern=20
end_iteration
Iteration 2 :
pattern=3
pattern=4
pattern=5
pattern=4
end_iteration
[...]
Et ce que je veux recuperer :
Code :
1
2
3
4
5
Iteration 1 : 
somme : 100
Iteration 2 :
somme : 16
[...]
Mais je voudrais que le code fonctionne quelque soit le nombre d'iterations.

J'ai bien un truc du genre :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
awk '
  function getvalue (ligne, pattern) {
    # ...
    return la_valeur_qui_m'interesse_sur_la_ligne ## Ce qui est apres le =
  }
  BEGIN {
  ## Initialisations
  }
  END {
  ## Trucs de fin
  }
  /INFO/ {
  nb_fois=$3;
  }
  /pattern/ {
  ma_valeur = getvalue ($0, "pattern");
  somme += ma_valeur;
  }
  /end_iteration/ {
  ## Affichage de la valeur
  somme = 0
  }
'
Mais je ne vois pas comment le repeter nb_fois... Des idees ?
__________________
Modérateur "C", "Informatique Générale & Hardware" et "Unix"
Les règles du forum
gangsoleil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2012, 17h21   #2
Membre confirmé
 
Homme
Développeur informatique
Inscription : octobre 2006
Messages : 181
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : octobre 2006
Messages : 181
Points : 267
Points : 267
Bonjour,

Je crois que l'idée est d'alimenter un tableau dont l'indice est une variable qui change a chaque ligne iteration et prend la valeur (ou partie ) de cette ligne puis d'augmenter la somme de la valeur du tableau pour cet indice jusqu'a la prochaine ligne iteration.

Je pense que tu auras rapidement une reponse circonstanciée dans ce sens par les pro du forum.
Jean.Cri1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2012, 17h40   #3
Modérateur
 
Avatar de gangsoleil
 
R&D en systemes informatiques bas niveau Unix/Linux
Inscription : mai 2004
Messages : 5 485
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : R&D en systemes informatiques bas niveau Unix/Linux

Informations forums :
Inscription : mai 2004
Messages : 5 485
Points : 9 625
Points : 9 625
Bon, alors en fait, mon code le fait deja....

C'est juste qu'a l'affichage, je faisais la moyenne...

Je laisse le code comme base de connaissance pour les suivants :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
awk '
  function getvalue (ligne, pattern) {
    # ...
    return la_valeur_qui_m'interesse_sur_la_ligne ## Ce qui est apres le =
  }
  BEGIN {
  ## Initialisations
  }
  END {
  ## Trucs de fin
  }
  /INFO/ {
  nb_fois=$3;
  }
  /pattern/ {
  ma_valeur = getvalue ($0, "pattern");
  somme += ma_valeur;
  }
  /end_iteration/ {
  printf (%s, somme);
  somme = 0;
  }'
'
__________________
Modérateur "C", "Informatique Générale & Hardware" et "Unix"
Les règles du forum
gangsoleil est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h58.


 
 
 
 
Partenaires

Hébergement Web