Bonjour a tous,
Je souhaiterais faire la somme des lignes d'une variable $toto qui contient:
2257
30
200
223
Est-ce possible simplement?
Merci
Bonjour a tous,
Je souhaiterais faire la somme des lignes d'une variable $toto qui contient:
2257
30
200
223
Est-ce possible simplement?
Merci
Le plus simple: avec (g)awk:
Sinon avec dc ça doit être possible également.
Code : Sélectionner tout - Visualiser dans une fenêtre à part echo $var | awk '{tot = tot + $0} END {print tot}'
Ou sinon en plus simple:
Code : Sélectionner tout - Visualiser dans une fenêtre à part echo $foo | wc -l
On ne cherche pas le nombre de ligne mais le total des nombres non?
var=0
while read toto ; do
var=$((var + toto))
done < ton_fichier
echo "Somme : $var"
J'ai une autre solution.
Explications:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 echo ${toto// /+} | bc
D'abord, je remplace tous les \n par +. Là, je ne sais pas trop comment faire, donc j'ai mis le vrai retour-charriot, d'où le retour à la ligne. Ensuite je passe le résultat à la commande bc qui fait le calcul.
Simple, non?
Bonjour,
Quand j'ai vu le titre du topic quelque chose m'a turlupiné
Une variable Shell est une chaîne, comment est-ce possible d'avoir plusieurs lignes dans une variable?
Comment le Shell fait-il pour interpréter le retour chariot dans une variable?
Je suis avide de savoir![]()
Une variable peut contenir des caractères non imprimables comme les retours à la ligne. Crée un fichier.test contenant:
Ensuite on affecte le contenu du fichier.test à la variable var et on affiche de deux manières différentes. Tu verras que les \n sont bien présents dans la chaîne.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 1 2 3
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 var=$(<fichier.test) echo $var echo "$var"
Les variables sont, en général, des chaînes de caractères. Or, le retour-charriot est un caractère, donc il peut être inséré dans les variables comme n'importe quel autre caractère.
Pour vérifier, il suffit de faire:
Ne pas oublier les doubles-quotes de echo.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 var="a b c" echo "$var"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 echo "${toto//$'\x0A'/+}" # en hexa echo "${toto//$'\012'/+}" # en octal
Merci Ripat pour le truc. J'irai même encore plus loin:
Explications:
Code : Sélectionner tout - Visualiser dans une fenêtre à part echo ${toto//$'\n'/+} | bc
Les mots commençant par $' sont traités spécialement: les caractères échappés sont remplacés par leur équivalent ASCII: \a, \b \e, \f, \n, \r, \t, \v, \\, \', \nnn, \xHH, \cx.
Et ça marche aussi pour l'assignation:
Malheureusement, Bash ne va pas interpréter $' entre double-quotes.
Code : Sélectionner tout - Visualiser dans une fenêtre à part toto=2257$'\n'30$'\n'200$'\n'223
Partager