#1 Le 09/06/2013, à 10:39
- sab113
calcul mathématique sous commandes shell [Résolu]
Bonjour à tous,
J'aimerais faire un calcul mathématique sous commandes shell, mais je ne sais pas comment je dois m'y prendre.
J'ai plusieurs fichiers composés de colonnes de mots et de leurs valeurs numériques issus d'un précédent traitement.
Par exemple:
fichier1 fichier2 fichier3 fichier4 .....
mot1|2.5 mot1|3.5 mot1|0.9 mot1|0.3
mot2|2.5 mot3|3.0 mot3|0.8 mot3|0.4
et je voudrais faire la moyenne des valeurs numériques de ces mots et avoir un résultat comme celui ci:
fichier
mot1| 7.2 (2.5+3.5+0.9+0.3)
mot2|2.5
mot3|4,2
Pourriez vous m'aider svp.
Je vous remercies à l'avance.
Dernière modification par sab113 (Le 09/06/2013, à 18:35)
Hors ligne
#2 Le 09/06/2013, à 11:15
- pingouinux
Re : calcul mathématique sous commandes shell [Résolu]
Bonjour,
J'ai une solution utilisant awk, mais je suppose qu'il s'agit d'un exercice et je te laisse chercher un peu. Voici quand même un indice :
$ awk -F\| '………' fichier*
mot1 som=7.2 moy=1.8
mot2 som=2.5 moy=2.5
mot3 som=4.2 moy=1.4
Dernière modification par pingouinux (Le 09/06/2013, à 11:19)
Hors ligne
#3 Le 09/06/2013, à 18:35
- sab113
Re : calcul mathématique sous commandes shell [Résolu]
Bonsoir pingouinux,
merci pingouinux pour ton aide. Non ce n'est pas un exercice mais des tests que je fais et des fois quand je retrouve des petits traitements à faire sur mes fichiers, j'utilise des commandes shell au lieu de les faire par programmation java, mais je ne maitrise pas vraiment c'est pour ça que je sollicite l'aide des experts du domaine
Je vais suivre tes indications merci pour ton aide.
Hors ligne
#4 Le 10/06/2013, à 05:14
- pingouinux
Re : calcul mathématique sous commandes shell [Résolu]
Je te donne ma solution avec awk :
awk -F\| '{s[$1]+=$2;n[$1]+=1}END{for(mot in s)printf("%s som=%s moy=%s\n",mot,s[mot],s[mot]/n[mot])}' fichier*
Voici aussi une solution en bash, mais nettement moins concise.
declare -A s n
# Calcul
while IFS=\| read mot val
do
s[$mot]=$(bc -l <<<"${s[$mot]:-0} + $val")
((n[$mot]++))
done < <(cat fichier*)
# Impression des résultats
for mot in "${!s[@]}"
do
printf "%s som=%s moy=%3.1f\n" "$mot" ${s[$mot]} $(bc -l <<<"${s[$mot]}/${n[$mot]}")
done
Dernière modification par pingouinux (Le 10/06/2013, à 05:19)
Hors ligne
#5 Le 10/06/2013, à 12:40
- sab113
Re : calcul mathématique sous commandes shell [Résolu]
Merci pingouinux pour ton aide
Hors ligne