Valeurs réelles en Shell
Résolu
titi26
-
titi26 -
titi26 -
Bonjour tout le monde,
Jai besoin de votre aide... En effet, j'aimerai savoir comment l'on peut faire pour pouvoir la somme de valeurs réelle, c'est à dire, des nombres à virgules (flottant).. Avez vous une idée ?
En fait, je doit faire appel a un fichier .txt qui possède deux colonnes de chiffre, et je dois additionner chaque ligne. Mais une contrainte a été posé : accepter les valeurs à virgule.
ex :
--- fichier.txt ---
2 3
5 6
7 8
4 5
En sortie, j'obtiendrai :
--- fichier.txt ---
2 3 5
5 6 11
7 8 15
4 5 9
Imaginon que je mette un chiffre a virgule, j'obtiendrai :
--- fichier.txt ---
2,2 3 5,2
5 6 11
7 8 15
4 5 9
J'espère avoir été assez clair... J'ai fait plein de recherche sur des bouquins mais rien na m'a aidé. Ce qui me bloque c'est qu'il doit faire appel à un fichier. Et je ne peux donc pas caster des variables en tant que flottant.
Jai besoin de votre aide... En effet, j'aimerai savoir comment l'on peut faire pour pouvoir la somme de valeurs réelle, c'est à dire, des nombres à virgules (flottant).. Avez vous une idée ?
En fait, je doit faire appel a un fichier .txt qui possède deux colonnes de chiffre, et je dois additionner chaque ligne. Mais une contrainte a été posé : accepter les valeurs à virgule.
ex :
--- fichier.txt ---
2 3
5 6
7 8
4 5
En sortie, j'obtiendrai :
--- fichier.txt ---
2 3 5
5 6 11
7 8 15
4 5 9
Imaginon que je mette un chiffre a virgule, j'obtiendrai :
--- fichier.txt ---
2,2 3 5,2
5 6 11
7 8 15
4 5 9
J'espère avoir été assez clair... J'ai fait plein de recherche sur des bouquins mais rien na m'a aidé. Ce qui me bloque c'est qu'il doit faire appel à un fichier. Et je ne peux donc pas caster des variables en tant que flottant.
A voir également:
- Valeurs réelles en Shell
- Classic shell - Télécharger - Personnalisation
- Maps satellite en temps réel - Guide
- Excel liste de valeurs - Guide
- Google maps trafic en temps réel - Guide
- Ssh secure shell download - Télécharger - Divers Web & Internet
10 réponses
Oui voilà...
Ceci est le script que je dois modifier.
#!/bin/bash
# On verifie si le fichier existe
if [ $# -lt 1 ]
then
echo "Il faut donner un nom de fichier en argument"
exit
fi
if !(test -f $1)
then
echo "Fichier $1 inconnu !"
exit
fi
# on efface l'ecran
tput clear
# on commence par faire une premiere passe pour
# isoler le max et le min. On suppose que l'entree
# est constituee d'entiers strictement positifs.
min=0
max=0
i=0
echo "------Fichier en entree: $1-------------"
cat < $1 | while true
do
read ligne
# traiter la ligne
if [ "$ligne" = "" ]; then break; fi
one=`echo $ligne | cut -d " " -f 1`
two=`echo $ligne | cut -d " " -f 2`
if [ $i -eq 0 ] #### Expliquez
then
max=$two
min=$one
i=$((i+12)) #### Expliquez
fi
if [ $one -gt $max ]
then
max=$one
fi
if [ $two -gt $max ]
then
max=$two
fi
if [ $one -lt $min ]
then
min=$one
fi
if [ $two -lt $min ]
then
min=$two
fi
# on ecrit le max et le min dans un fichier
echo "$max $min" > /tmp/bidon
done
# On effectue la deuxieme passe
# on commence par recuperer le max et le min
max=`cat /tmp/bidon |cut -d " " -f 1`
min=`cat /tmp/bidon |cut -d " " -f 2`
# on reprend
cat < $1 | while true
do
read ligne
# traiter la ligne
if [ "$ligne" = "" ]; then break; fi
one=`echo $ligne | cut -d " " -f 1`
two=`echo $ligne | cut -d " " -f 2`
echo $one $two $((two+one)) $min $max
done
Ceci est le script que je dois modifier.
#!/bin/bash
# On verifie si le fichier existe
if [ $# -lt 1 ]
then
echo "Il faut donner un nom de fichier en argument"
exit
fi
if !(test -f $1)
then
echo "Fichier $1 inconnu !"
exit
fi
# on efface l'ecran
tput clear
# on commence par faire une premiere passe pour
# isoler le max et le min. On suppose que l'entree
# est constituee d'entiers strictement positifs.
min=0
max=0
i=0
echo "------Fichier en entree: $1-------------"
cat < $1 | while true
do
read ligne
# traiter la ligne
if [ "$ligne" = "" ]; then break; fi
one=`echo $ligne | cut -d " " -f 1`
two=`echo $ligne | cut -d " " -f 2`
if [ $i -eq 0 ] #### Expliquez
then
max=$two
min=$one
i=$((i+12)) #### Expliquez
fi
if [ $one -gt $max ]
then
max=$one
fi
if [ $two -gt $max ]
then
max=$two
fi
if [ $one -lt $min ]
then
min=$one
fi
if [ $two -lt $min ]
then
min=$two
fi
# on ecrit le max et le min dans un fichier
echo "$max $min" > /tmp/bidon
done
# On effectue la deuxieme passe
# on commence par recuperer le max et le min
max=`cat /tmp/bidon |cut -d " " -f 1`
min=`cat /tmp/bidon |cut -d " " -f 2`
# on reprend
cat < $1 | while true
do
read ligne
# traiter la ligne
if [ "$ligne" = "" ]; then break; fi
one=`echo $ligne | cut -d " " -f 1`
two=`echo $ligne | cut -d " " -f 2`
echo $one $two $((two+one)) $min $max
done
J'ai essayé mais cela m'affiche rien.
Normal que cela n'affiche rien. La commande que je t'ai donné modifie fichier.txt. Affiche ton fichier avec cat fichier.txt, et normalement il y aura une colonne supplémentaire valant la somme des deux précédentes.
Ce que je comprend pas dans ta ligne c'est que $1 et $2 ne peuvent pas marcher étant donné que les nombres à additionner sont dans le fichier.txt en question.
Ben si justement ^^. le cat | awk redirige la sortie de cat sur l'entrée de awk. Les variables $1 et $2 se retrouvent donc automatiquement changées.
Normal que cela n'affiche rien. La commande que je t'ai donné modifie fichier.txt. Affiche ton fichier avec cat fichier.txt, et normalement il y aura une colonne supplémentaire valant la somme des deux précédentes.
Ce que je comprend pas dans ta ligne c'est que $1 et $2 ne peuvent pas marcher étant donné que les nombres à additionner sont dans le fichier.txt en question.
Ben si justement ^^. le cat | awk redirige la sortie de cat sur l'entrée de awk. Les variables $1 et $2 se retrouvent donc automatiquement changées.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Ah ouai ?! Ceci marche bien chez toi ?! C'est bizar parce que chez moi, cela ne marche pas du tout... Ca m'affiche toujours :
2,2 3 5
Voila mon bout de code modifié :
if [ "$ligne" = "" ]; then break; fi
one=`echo $ligne | cut -d " " -f 1`
two=`echo $ligne | cut -d " " -f 2`
echo ${one} ${two} | awk '{print $1" "$2" "$1+$2}'
done
Quan je l'exécute :
> ./tab.sh fichier.txt
2,2 3 5
1 5 6
2 8 10
>
Je comprend pas... peut-être que je n'ai pas tout les packages ?
2,2 3 5
Voila mon bout de code modifié :
if [ "$ligne" = "" ]; then break; fi
one=`echo $ligne | cut -d " " -f 1`
two=`echo $ligne | cut -d " " -f 2`
echo ${one} ${two} | awk '{print $1" "$2" "$1+$2}'
done
Quan je l'exécute :
> ./tab.sh fichier.txt
2,2 3 5
1 5 6
2 8 10
>
Je comprend pas... peut-être que je n'ai pas tout les packages ?
Si tu veux que cela s'affiche sur l'écran, tu fais simplement :
Si tu veux que cela modifie ton fichier sans que cela s'affiche sur l'écran :
cat fichier.txt | awk '{print $1" "$2" "$1+$2}'
Si tu veux que cela modifie ton fichier sans que cela s'affiche sur l'écran :
cat fichier.txt | awk '{print $1" "$2" "$1+$2}' > fichier.txt
C'est un peu tiré par les cheveux, mais tu peux essayer ça :
one=3,2;two=5 echo ${one} + ${two} = $(echo "${one/,/.} + ${two/,/.}" | bc | tr '.' ',') 3,2 + 5 = 8,2;-)
Ah, j'avais même pas vu. Cela est dû à cause de la virgule décimale au lieu du point décimal.
Cdlt
cat fich.txt | tr ',' '.' | awk '{print $1" "$2" "$1+$2}' | tr '.' ','
Cdlt