Awk, calcul valeur moyenne (plusieurs fichiers)

Résolu/Fermé
yann747 Messages postés 128 Date d'inscription mardi 25 octobre 2011 Statut Membre Dernière intervention 13 octobre 2021 - 19 oct. 2017 à 15:11
yann747 Messages postés 128 Date d'inscription mardi 25 octobre 2011 Statut Membre Dernière intervention 13 octobre 2021 - 20 oct. 2017 à 16:48
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 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
20 oct. 2017 à 07:27
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 128 Date d'inscription mardi 25 octobre 2011 Statut Membre Dernière intervention 13 octobre 2021 2
20 oct. 2017 à 11:13
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 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
20 oct. 2017 à 13:01
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 128 Date d'inscription mardi 25 octobre 2011 Statut Membre Dernière intervention 13 octobre 2021 2 > dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024
20 oct. 2017 à 14:47
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 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
Modifié le 20 oct. 2017 à 15:27
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 128 Date d'inscription mardi 25 octobre 2011 Statut Membre Dernière intervention 13 octobre 2021 2 > dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024
20 oct. 2017 à 16:48
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