Rechercher : dans
Par :

Valeurs réelles en Shell

Dernière réponse le 23 avr 2009 à 16:51:19 titi26, le 23 avr 2009 à 14:28:07 
 Signaler ce message aux modérateurs

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.

Configuration: Windows XP
Internet Explorer 6.0

Meilleures réponses pour « Valeurs réelles en Shell » dans :
[Shell] Tester une variable numérique Voir Tester une variable numérique    Préambule Dans un environnement "shell", les variables sont, par défaut, de type "chaîne de caractères". De ce fait il n'est pas possible de déclarer une variable de type "entier" (enfin, ceci n'est pas tout à...
Guide d'utilisation du Shell pour débutant VoirSHELL BASH - GUIDE D'UTILISATION - Niveau Débutant Introduction Appel aux membres CCM II. C'est quoi le shell ? III. Comment accéder à la ligne de commande IV. Les consoles virtuelles Exemple : Accéder à la console 3 depuis l'interface...
.exe n'est pas une application Win32 valide VoirLorsque vous lancez un fichier exécutable, Windows vous affiche un message du type : Nom de l'application n'est pas une application Win32 valide Pour y remédier, il existe plusieurs solutions correspondant à différentes causes...
[Shell] Transferer des fichiers via ssh VoirSSH - Secure SHell Utilisation Informations complémentaires LOGICIELS Sous Linux/Unix Sous Windows Avertissement Utilisation SSH permet d'utiliser des pipelines de commandes, et d'utiliser des tubes d'entrées/sorties comme toute...
Télécharger CDBF Shell VoirCertains fichiers de votre ordinateur sont dans un format appelé DBF. Ce sont généralement des bases de données issues de DBase. Il y a par exemple les fichiers liés à Outlook Express qui sont dans ce format. CDBF Shell est une application vous...
Systèmes UNIX - Le shell VoirIntroduction au shell L'interpréteur de commandes est l'interface entre l'utilisateur et le système d'exploitation, d'où son nom anglais «shell», qui signifie «coquille». Le shell est ainsi chargé de faire l'intermédiaire entre le système...
Linux - Le shell VoirIntroduction au shell L'interpréteur de commandes est l'interface entre l'utilisateur et le système d'exploitation, d'où son nom anglais «shell», qui signifie «coquille». Le shell est ainsi chargé de faire l'intermédiaire le système...

1

jipicy, le 23 avr 2009 à 15:12:16

Salut,

On peut avoir un aperçu de ton script s'il te plaît ?
$ man woman
Il n'y a pas de page de manuel pour woman.

Répondre à jipicy

2

fiddy, le 23 avr 2009 à 15:19:28

Salut,
Cela se fait en une ligne avec un pipe et une redirection en utilisant cat et awk.
Google is your friend

Répondre à fiddy

3

titi26, le 23 avr 2009 à 15:22:18

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

Répondre à titi26

4

fiddy, le 23 avr 2009 à 15:25:44

Sinon tu peux utiliser simplement :

cat fichier.txt | awk '{print $1" "$2" "$1+$2}' > fichier.txt

Google is your friend

Répondre à fiddy

5

jipicy, le 23 avr 2009 à 15:30:54

<mode des chiffres et des lettres>
Pas mieux ;-)
</mode des chiffres et des lettres>
$ man woman
Il n'y a pas de page de manuel pour woman.

Répondre à jipicy

6

titi26, le 23 avr 2009 à 15:43:37

J'ai essayé mais cela m'affiche rien.

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. Ne peut on pas caster la variable one et two ?

Répondre à titi26

8

fiddy, le 23 avr 2009 à 15:55:26

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.
Google is your friend

Répondre à fiddy

7

jipicy, le 23 avr 2009 à 15:49:13

echo $one $two $min $max | awk '{print $1" "$2" "$1+$2}" "$3" "$4'
$ man woman
Il n'y a pas de page de manuel pour woman.

Répondre à jipicy

9

titi26, le 23 avr 2009 à 15:58:26

J'ai bien fait comme ce que tu as dit.. Mais cela ne m'affiche pas la somme avec les flottants. Par exemple, j'ai mis en 1ère ligne de fichier.txt : 2,2 3
Et cela me donne toujours 5 et non 5,2.

Je ne vois pas de solution pour pouvoir lui faire faire l'addition des nombres flottants.

Répondre à titi26

10

jipicy, le 23 avr 2009 à 16:01:00

jp@MDK:~/tmpfs ssh$ echo ${one} ${two}
3,2 5

jp@MDK:~/tmpfs ssh$ echo ${one} ${two} |awk '{print $1" "$2" "$1+$2}'
3,2 5 8,2
;-))
$ man woman
Il n'y a pas de page de manuel pour woman.

Répondre à jipicy

11

titi26, le 23 avr 2009 à 16:14:14

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 ?

Répondre à titi26

12

titi26, le 23 avr 2009 à 16:16:33

Merci en tout cas de ton aide. Je suis débutante alors voilà. Sa a du se voir. lol

Merci ;)

Répondre à titi26

13

fiddy, le 23 avr 2009 à 16:19:03

Si tu veux que cela s'affiche sur l'écran, tu fais simplement :

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

Google is your friend

Répondre à fiddy

14

titi26, le 23 avr 2009 à 16:28:42

Toujours pas..

Ca m'affiche toujours :
2,2 3 5

C'est pas grave. Merci de ton aide.

Répondre à titi26

15

jipicy, le 23 avr 2009 à 16:31:04

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
;-)
$ man woman
Il n'y a pas de page de manuel pour woman.

Répondre à jipicy

16

fiddy, le 23 avr 2009 à 16:44:03

Ah, j'avais même pas vu. Cela est dû à cause de la virgule décimale au lieu du point décimal.

cat fich.txt | tr ',' '.' | awk '{print $1" "$2" "$1+$2}' | tr '.' ','


Cdlt
Google is your friend

Répondre à fiddy

17

titi26, le 23 avr 2009 à 16:47:08

Cela m'affiche

> ./tab.sh fichier.txt
./tab.sh : line 79: echo 2,2 3 : commande introuvable
2,2 + 3 =
>

Répondre à titi26

18

jipicy, le 23 avr 2009 à 16:48:36

Avant de le mettre dans ton script, essaie déjà dans un shell en interactif voir si ça marche...
$ man woman
Il n'y a pas de page de manuel pour woman.

Répondre à jipicy

19

 titi26, le 23 avr 2009 à 16:51:19

Ah merci fiddy... Ca a marché !!
Je te remercie de ton aide. Et merci aussi a jipicy.

Cordialement

Répondre à titi26
Collection CommentÇaMarche.net