Valeurs réelles en Shell
Résolu/Fermé
A voir également:
- Valeurs réelles en Shell
- Classic shell windows 10 français - Télécharger - Personnalisation
- Blocage agriculteur carte en temps réel - Guide
- Startup.nsh shell ✓ - Forum Windows 10
- Excel intervalle entre 2 valeurs ✓ - Forum Excel
- Shell do while ✓ - Forum Shell
10 réponses
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 894
23 avril 2009 à 15:12
23 avril 2009 à 15:12
Salut,
On peut avoir un aperçu de ton script s'il te plaît ?
On peut avoir un aperçu de ton script s'il te plaît ?
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 833
23 avril 2009 à 15:19
23 avril 2009 à 15:19
Salut,
Cela se fait en une ligne avec un pipe et une redirection en utilisant cat et awk.
Cela se fait en une ligne avec un pipe et une redirection en utilisant cat et awk.
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
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 833
23 avril 2009 à 15:25
23 avril 2009 à 15:25
Sinon tu peux utiliser simplement :
cat fichier.txt | awk '{print $1" "$2" "$1+$2}' > fichier.txt
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 894
>
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
23 avril 2009 à 15:30
23 avril 2009 à 15:30
<mode des chiffres et des lettres>
Pas mieux ;-)
</mode des chiffres et des lettres>
Pas mieux ;-)
</mode des chiffres et des lettres>
titi26
>
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
23 avril 2009 à 15:43
23 avril 2009 à 15:43
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 ?
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 ?
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 833
>
titi26
23 avril 2009 à 15:55
23 avril 2009 à 15:55
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.
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 894
23 avril 2009 à 15:49
23 avril 2009 à 15:49
echo $one $two $min $max | awk '{print $1" "$2" "$1+$2}" "$3" "$4'
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 894
>
titi26
23 avril 2009 à 16:01
23 avril 2009 à 16:01
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;-))
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 ?
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 833
23 avril 2009 à 16:19
23 avril 2009 à 16:19
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
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 894
23 avril 2009 à 16:31
23 avril 2009 à 16:31
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;-)
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 833
23 avril 2009 à 16:44
23 avril 2009 à 16:44
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
Cela m'affiche
> ./tab.sh fichier.txt
./tab.sh : line 79: echo 2,2 3 : commande introuvable
2,2 + 3 =
>
> ./tab.sh fichier.txt
./tab.sh : line 79: echo 2,2 3 : commande introuvable
2,2 + 3 =
>
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 894
23 avril 2009 à 16:48
23 avril 2009 à 16:48
Avant de le mettre dans ton script, essaie déjà dans un shell en interactif voir si ça marche...