Awk, calcul valeur moyenne (plusieurs fichiers)

Résolu
yann747 Messages postés 127 Date d'inscription   Statut Membre Dernière intervention   -  
yann747 Messages postés 127 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

je dispose de 10 fichiers, fichiers composés de 2 colonnes chacun :

- d'une 1ère colonne PRODUIT (int)
- d'une 2ème colonne PRIX (float)

(sans entête)

La colonne "PRODUIT" est la même dans chaque fichier.
La colonne "PRIX" change dans chaque fichier
le séparateur entre chaque colonne est un espace.

fichier1.txt :

1 24.2
2 56.1
3 45.8
4 21.89
...


fichier2.txt :

1 28.8
2 45.65
3 44.622
4 27.41
...


etc ...

fichier10.txt :

1 21.3
2 48
3 41.55
4 22.62
...


je voudrais créer un 11ème fichier de la même forme, qui aurait la même première colonne "PRODUIT" que les autres fichiers.
Dans la deuxième colonne le PRIX moyen de chaque produit.

j'espère ne pas avoir été trop confus, merci d'avance de votre aide.
A voir également:

1 réponse

dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
hello
essayer
$ awk '{t[$1]+=$2} END {OFMT="%.2f"; for (n=1; n<=FNR; n++)print n, t[n]/(ARGC-1)}'  fichier*.txt
1
yann747 Messages postés 127 Date d'inscription   Statut Membre Dernière intervention   2
 
Bonjour,
ça fait presque ce que je veux, j’avais juste oublié de préciser que les id des produits n'étaient pas consécutifs, il a des sauts, mais restent tout de même identiques pour chaque fichier. Du coup quand un id ne correspond à aucun produit, logiquement 0 s'affiche pour la moyenne des produits inexistants. Pour le reste ça marche.
merci
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
comme ca ?
$ awk '{t[$1]+=$2} END {OFMT="%.2f"; for (n=1; n<=FNR; n++)if(t[n])print n, t[n]/(ARGC-1)}'  fichier*.txt
0
yann747 Messages postés 127 Date d'inscription   Statut Membre Dernière intervention   2 > dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention  
 
Merci pour la réponse, ça marche mais ça ne traite pas toutes les lignes mais celles qui sont traitées sont OK..
Il faut que je remplace "en dur" FNR par le dernier id de produit.
sinon le traitement 's’arrête au produit qui a l'id = FNR or les id vont au delà.
Idéalement, si possible, il faudrait remplacer FNR par le premier terme de la dernière ligne du fichier (le dernier id). Merci d'avance
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
montrer des données réelles
essayer
awk 'BEGIN{PROCINFO["sorted_in"]="@ind_num_asc"} {t[$1]+=$2} END {OFMT="%.2f"; for(n in t)print n, t[n]/(ARGC-1)}'  fichier*.txt

ou
awk '{t[$1]+=$2} END {OFMT="%.2f"; for(n in t)print n, t[n]/(ARGC-1)}'  fichier*.txt
0
yann747 Messages postés 127 Date d'inscription   Statut Membre Dernière intervention   2 > dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention  
 
Effectivement j'aurais du commencer par donner un vrai échantillon, désolé. En tout cas les 2 dernières solutions proposées font ce que je cherchais. Un grand merci !
0