Awk, calcul valeur moyenne (plusieurs fichiers)

[Résolu/Fermé]
Signaler
Messages postés
128
Date d'inscription
mardi 25 octobre 2011
Statut
Membre
Dernière intervention
13 octobre 2021
-
Messages postés
128
Date d'inscription
mardi 25 octobre 2011
Statut
Membre
Dernière intervention
13 octobre 2021
-
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.

1 réponse

Messages postés
18286
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
15 octobre 2021
5 397
hello
essayer
$ awk '{t[$1]+=$2} END {OFMT="%.2f"; for (n=1; n<=FNR; n++)print n, t[n]/(ARGC-1)}'  fichier*.txt
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 41713 internautes nous ont dit merci ce mois-ci

Messages postés
128
Date d'inscription
mardi 25 octobre 2011
Statut
Membre
Dernière intervention
13 octobre 2021
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
Messages postés
18286
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
15 octobre 2021
5 397
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
Messages postés
128
Date d'inscription
mardi 25 octobre 2011
Statut
Membre
Dernière intervention
13 octobre 2021
2 >
Messages postés
18286
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
15 octobre 2021

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
Messages postés
18286
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
15 octobre 2021
5 397
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
Messages postés
128
Date d'inscription
mardi 25 octobre 2011
Statut
Membre
Dernière intervention
13 octobre 2021
2 >
Messages postés
18286
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
15 octobre 2021

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 !