Forum Programmation.shell Addition d'un nombre d'occurences selon une chaine de caractère

Posté par  . Licence CC By‑SA.
Étiquettes :
0
13
août
2015

Bonjour,

Je suis bloqué sur un petit script en shell. Je récupère dans un fichier txt des entrées comme ci dessous :

120 facebook.fr
32 linuxfr.org

Lorsque je lance mon script avec le cron, j'ai du coup la même chose mais plusieurs fois puisque les résultats s'ajoutent au fur et à mesure du resultat.txt :

120 facebook.fr
32 linuxfr.org
64 facebook.fr
12 linuxfr.org

Je souhaiterai donc pouvoir additionner les nombre d'occurences quand les noms de domaines sont identiques, soit au final obtenir :

184 facebook.fr
44 linuxfr.org

J'avais pensé à faire quelque chose du genre :

cat resultat.txt | awk '{print $2}' | sort | uniq > fichier_intermediaire.txt

Après faire une boucle sur ce fichier puisque j'ai les noms de domaines uniques et dans cette boucle faire une boucle qui trouve chaque nom de domaine et en extrait le chiffre devant pour pouvoir faire l'addition de tout ce qu'il trouve.
Mais à partir de là je suis bloqué, je ne vois vraiment pas comment faire… Dans ma tête c'est clair mais impossible de le mettre en forme, certainement dû à un manque de connaissance en scripting..

Merci de vos avis éclairés.

  • # un tableau

    Posté par  . Évalué à 4.

    si tu as bash4, ca doit pouvoir se faire avec un tableau pour chaque domaine.
    tu le demarres à zero : ${facebook[occurence]}=0
    et tu le remplis à chaque passage dans le fichier d'origine.
    a chaque fois qu'apparait facebook, tu fais
    ${facebook[occurence]}=eval(${facebook[occurence]}+$valeur_lue)

    evidemment tu peux utiliser des variables dans le nom du tableau
    dans un boucle sur la variable siteca devient alors
    ${$site[occurence]}

    etc

  • # faut voir avec eval

    Posté par  . Évalué à 2.

    typiquement je ferai un

    while read nb site 
    do
      siteVar=$( tr -d '[-.]' <<< $site) #pas de caractères spéciaux dans les noms de variable
    
    #teste si non existance de la variable $siteVar
      eval "$siteVar=nb"
      listeSite="$listeSite $site"
    #sinon
      eval $siteVar+=$(( $siteVar + $nb ))
    
    done

    voila

    Il ne faut pas décorner les boeufs avant d'avoir semé le vent

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n’en sommes pas responsables.