Awk, calcul valeur moyenne (plusieurs fichiers)

Résolu
yann747 Messages postés 128 Statut Membre -  
yann747 Messages postés 128 Statut Membre -
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

  1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    hello
    essayer
    $ awk '{t[$1]+=$2} END {OFMT="%.2f"; for (n=1; n<=FNR; n++)print n, t[n]/(ARGC-1)}'  fichier*.txt
    1
    1. yann747 Messages postés 128 Statut Membre 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
    2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
       
      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
      1. yann747 Messages postés 128 Statut Membre 2 > dubcek Messages postés 18627 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
    3. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
       
      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
      1. yann747 Messages postés 128 Statut Membre 2 > dubcek Messages postés 18627 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