<![CDATA[Forum Ubuntu-fr.org / commandes shell calcul mathématique tableau[Résolu]]]> http://forum.ubuntu-fr.org/viewtopic.php?id=1203311 Tue, 19 Feb 2013 16:59:03 +0000 FluxBB <![CDATA[Réponse à : commandes shell calcul mathématique tableau[Résolu]]]> http://forum.ubuntu-fr.org/viewtopic.php?pid=12638571#p12638571 Merci  claudius01 smile, merci credenhill et merci pingouinux pour toutes vos réponses smile.

]]>
Tue, 19 Feb 2013 16:59:03 +0000 http://forum.ubuntu-fr.org/viewtopic.php?pid=12638571#p12638571
<![CDATA[Réponse à : commandes shell calcul mathématique tableau[Résolu]]]> http://forum.ubuntu-fr.org/viewtopic.php?pid=12636851#p12636851 sab113,

L'argument -F '<separator>' de awk ne doit s'appliquer qu'aux 2 seules lignes :

poids_max=`head -1 $file | awk -F '|' '{print $3}'`

et

awk -F '|' -v nbr_termes=${nbr_termes} -v poids_max=${poids_max} '

Cordialement, A+
--
Claudius

]]>
Tue, 19 Feb 2013 15:12:28 +0000 http://forum.ubuntu-fr.org/viewtopic.php?pid=12636851#p12636851
<![CDATA[Réponse à : commandes shell calcul mathématique tableau[Résolu]]]> http://forum.ubuntu-fr.org/viewtopic.php?pid=12636471#p12636471 Merci pour votre aide,
j'avais essayé d'ajouter un séparateur de champ "|" au lieu de l'espace car ya certains mots composés auquel je ne peux pas avoir le poids. C'est à dire que mes colonnes sont séparés par le |.
rang|terme|poids
0 |terme1|0.9
1 |terme2| 0.5
2 |terme3| 0.3
..........
donc j'ai ajouté aux commandes awk : -F '|'

nbr_termes=`wc -l $file | awk  -F '|' '{print $1}'`
poids_max=`head -1 $file | awk -F '|' '{print $3}'`

Mais sa ne marche pas ?

]]>
Tue, 19 Feb 2013 14:36:36 +0000 http://forum.ubuntu-fr.org/viewtopic.php?pid=12636471#p12636471
<![CDATA[Réponse à : commandes shell calcul mathématique tableau[Résolu]]]> http://forum.ubuntu-fr.org/viewtopic.php?pid=12633931#p12633931 Bonjour,
Une solution en bash, un peu plus longue

#!/bin/bash

fichier="$1"
nval=$(( $(wc -l "$fichier" | cut -d" " -f1) - 1))

while read rang terme poids
do
   [[ $rang == 0 ]] && maxim=$poids
   val=$(bc -l <<<"($poids/$maxim)*($rang+1)/$nval")
   printf "%3d %-8s %.3f => %.3f\n" $rang $terme $poids $val
done < <(tail -n +2 "$fichier")
]]>
Tue, 19 Feb 2013 11:24:59 +0000 http://forum.ubuntu-fr.org/viewtopic.php?pid=12633931#p12633931
<![CDATA[Réponse à : commandes shell calcul mathématique tableau[Résolu]]]> http://forum.ubuntu-fr.org/viewtopic.php?pid=12633761#p12633761 dur dur 3 en dur, effectivement

$ awk '{t[NR]=$0} END{while(++n<=NR){$0=t[n]; if(n==1)m=$3; x=($3/m)*(($1+1)/NR); printf "%s %.2f\n", $0, x}}' fichier
0        terme1   0.6 0.33
1        terme2   0.5 0.56
2        terme3   0.3 0.50
$ 
]]>
Tue, 19 Feb 2013 11:14:34 +0000 http://forum.ubuntu-fr.org/viewtopic.php?pid=12633761#p12633761
<![CDATA[Réponse à : commandes shell calcul mathématique tableau[Résolu]]]> http://forum.ubuntu-fr.org/viewtopic.php?pid=12633671#p12633671 credenhill a écrit :

$ awk 'NR<2{m=$3} {x=($3/m)*(($1+1)/3); printf "%s %.2f\n", $0, x}' fichier

Objection votre honneur ... (($1+1)/3) avec 3 en dur ;-)

Ma version qui tient en plus d'une ligne, que j'admire au demeurant :

#!/bin/ksh

if [ $# -lt 1 ]; then
  echo "Usage: $0 <file>"
  exit 2
fi

file=$1

nbr_termes=`wc -l $file | awk '{print $1}'`
poids_max=`head -1 $file | awk '{print $3}'`

awk -v nbr_termes=${nbr_termes} -v poids_max=${poids_max} '
BEGIN {
  printf("nbr_termes [%f]\n", nbr_termes);
  printf("poids_max  [%f]\n", poids_max);
  rang=0
}
{
  if (poids_max > 0) {
    poids=($3 / poids_max) * ((rang + 1) / nbr_termes);
    printf("rang %d: %f => %.2f\n", rang++, $3, poids);
  }
  else {
    printf("Error: Invalid 'poids_max' (%f)\n", poids_max);
    exit
  }
}
' $file

exit 0

Cordialement, A+
--
Claudius

]]>
Tue, 19 Feb 2013 11:07:04 +0000 http://forum.ubuntu-fr.org/viewtopic.php?pid=12633671#p12633671
<![CDATA[Réponse à : commandes shell calcul mathématique tableau[Résolu]]]> http://forum.ubuntu-fr.org/viewtopic.php?pid=12633491#p12633491 hello

$ awk 'NR<2{m=$3} {x=($3/m)*(($1+1)/3); printf "%s %.2f\n", $0, x}' fichier
0        terme1   0.6 0.33
1        terme2   0.5 0.56
2        terme3   0.3 0.50
$ 
]]>
Tue, 19 Feb 2013 10:57:01 +0000 http://forum.ubuntu-fr.org/viewtopic.php?pid=12633491#p12633491
<![CDATA[Réponse à : commandes shell calcul mathématique tableau[Résolu]]]> http://forum.ubuntu-fr.org/viewtopic.php?pid=12633301#p12633301 Bonjour,

sab113 a écrit :

Pourriez vous svp m'aidez.

Avec 'awk' (qui revient à écrire du C) dans un script, cela devrait le faire (avec les données fournies) :

$ ./poids.sh poids.txt
nbr_termes [3.000000]
poids_max  [0.600000]
rang 0: 0.600000 => 0.33
rang 1: 0.500000 => 0.56
rang 2: 0.300000 => 0.50

Cordialement, A+
--
Claudius

]]>
Tue, 19 Feb 2013 10:45:40 +0000 http://forum.ubuntu-fr.org/viewtopic.php?pid=12633301#p12633301
<![CDATA[commandes shell calcul mathématique tableau[Résolu]]]> http://forum.ubuntu-fr.org/viewtopic.php?pid=12632841#p12632841 Bonjour à tous,

J'aimerais sollicité votre aide : j'ai un fichier contenant 3 colonnes et par exemple 3 termes.
rang   terme     poids
0        terme1   0.6
1        terme2   0.5
2        terme3   0.3

Mes termes sont rangés par ordre décroissant de leurs poids, le premier terme a le poids le plus élevé. je voudrais en faite faire un petit calcul et ça me prends du temps puisque mon fichier est vraiment grand et j'ai pas assez de temps pour terminer les calcul.

pour chaque terme exemple:
le calcul du poids est (terme1)=  (poids / poids maxim)*((rang+1)/nombre de terme)
donc:
0  terme1   (0.6/0.6)*((0+1/3)=0.33
1   terme2   (0.5/0.6)*((1+1)/3)=0.55
2  terme3     (0.3/0.6)*((2+1)/3)=0.5
..........
j'aimerais faire ce calcul sous commande. Pourriez vous svp m'aidez.
Je vous remercies à l'avance.

]]>
Tue, 19 Feb 2013 10:14:17 +0000 http://forum.ubuntu-fr.org/viewtopic.php?pid=12632841#p12632841