#1 Le 20/02/2018, à 10:34
- remi82
Récupérer une partie d'une chaine de caractère en bash
Bonjour,
J'ai installé dans ma salle info un thermomètre dont je peux récupérer les infos par snmp.
En cas de température supérieur à un seuil, je reçois une alerte par mail.
Mais j'aimerai avoir une meilleur lecture dans le sens ou je récupère actuellement la température de la sorte : pour 18°, je récupère 180
Je cherche donc à mettre en forme pour avoir 18,2° par exemple
J'ai essayé avec cut -d
Puis, b=${a:1:2}
Mais rien ne fonctionne. Le shell me retourne "Bad substitution".
Merci par avance.
Hors ligne
#2 Le 20/02/2018, à 10:44
- Watael
Re : Récupérer une partie d'une chaine de caractère en bash
salut,
Bad substitution parce que tu n'utilises pas bash.
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#3 Le 20/02/2018, à 13:11
- remi82
Re : Récupérer une partie d'une chaine de caractère en bash
Bonjour,
Je viens de réussir en utilsant perl
Hors ligne
#4 Le 20/02/2018, à 14:13
- Watael
Re : Récupérer une partie d'une chaine de caractère en bash
c'est débile !
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#5 Le 20/02/2018, à 14:48
- ar barzh paour
Re : Récupérer une partie d'une chaine de caractère en bash
je pense que ce que veut dire Watael en très concis , on utilise pas un marteau-pilon pour enfoncer un clou
#!/bin/sh
a=182
b=${a:1:2}
echo $b
à l'éxécution car j'ai mis /bin/sh et sh ne connaît pas la syntaxe utilisée dans le code
./ex1
./ex1: 3: ./ex1: Bad substitution
correction en mettant bash
#!/bin/bash
a=182
b=${a:1:2}
echo $b
à l'exécution bon cette fois
./ex1
82
Dernière modification par ar barzh paour (Le 20/02/2018, à 14:50)
PC : B760M DS3H DDR4, 12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : ThinkPad P50 I7-6820HQ, 16G0 Ram Ubuntu 22.04 Ubuntu 24.04 , W10-PRO( en voyage )
Portable2 : T5750 @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )
Hors ligne
#6 Le 20/02/2018, à 17:46
- erresse
Re : Récupérer une partie d'une chaine de caractère en bash
Bonjour,
En utilisant :
awk "BEGIN {printf \"%.1f°\n\", 182/10}"
pour mettre en forme le résultat.
Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois le problème solutionné, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.
Hors ligne
#7 Le 20/02/2018, à 18:10
- Watael
Re : Récupérer une partie d'une chaine de caractère en bash
EN BASH !*
var=28
echo "${var::${#var}-1},${var:${#var}-1:1}"
2,8
var=283
echo "${var::${#var}-1},${var:${#var}-1:1}"
28,3
*ils m'énervent.
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#8 Le 20/02/2018, à 18:22
- DonutMan75
Re : Récupérer une partie d'une chaine de caractère en bash
Sinon, ça se fait très bien en Matlab aussi :
x='182';
y = str2num(x);
message = sprintf('La temperature est de %3.1f degre Celsius\n', y/10);
disp(message);
(ok ok, je troll... désolé Watael et les autres, mais vu la tournure du fil c'était tentant ^^)
Bonne soirée à tous
Donut
Hors ligne
#9 Le 20/02/2018, à 18:29
- erresse
Re : Récupérer une partie d'une chaine de caractère en bash
C'était le seul moyen pour te faire donner une solution...
Merci de ta réponse, je vais aussi en faire mon profit.
J'ai cherché désespérément le moyen de formater des nombres en bash (des montants notamment) mais je n'ai rien trouvé d'autre que la solution "awk printf" que j'ai indiquée. Ça manque un masque de format dans une commande "echo" toute bête, on a souvent besoin de mettre en forme pour affichage ou impression...
Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois le problème solutionné, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.
Hors ligne
#10 Le 20/02/2018, à 19:12
- Watael
Re : Récupérer une partie d'une chaine de caractère en bash
ah, ah, ah ! matlab, j'adore !
printf est une commande shell POSIX, et parce que bash ne sait pas rendre des résultats sous forme décimale, ce que tu as fait avec awk pourrait être fait avec bash :
var=182
printf '%d°\n' $((var/10))
ps: si tu veux ne pas avoir à protéger les " dans un script/oneLine awk, place la commande awk entre '; ça évitera aussi les collisions entre les champs définis par awk et les paramètres positionnels du shell.
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#11 Le 20/02/2018, à 19:14
- Sciensous
Re : Récupérer une partie d'une chaine de caractère en bash
ah non! sortir le bash* pour ça !!
T=180; echo "scale=2;$T/10"|bc -l
c'est plus élégant non ?
Dernière modification par Sciensous (Le 20/02/2018, à 19:14)
antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )
Hors ligne
#12 Le 20/02/2018, à 19:18
- ar barzh paour
Re : Récupérer une partie d'une chaine de caractère en bash
j'adore ces posts ......... alors je copie
T=182; echo $(echo "scale=1;$T/10"|bc -l)°
18.2°
Dernière modification par ar barzh paour (Le 20/02/2018, à 20:34)
PC : B760M DS3H DDR4, 12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : ThinkPad P50 I7-6820HQ, 16G0 Ram Ubuntu 22.04 Ubuntu 24.04 , W10-PRO( en voyage )
Portable2 : T5750 @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )
Hors ligne
#13 Le 20/02/2018, à 19:35
- Watael
Re : Récupérer une partie d'une chaine de caractère en bash
de toute façon, on ne sait pas exactement ce que veut Remi82.
veut-il la partie entière uniquement ? ou veut-il aussi la partie décimale ?
c'est pas super clair.
et après ça dépend :
est-ce qu'on veut faire du full-bash : on peut/il faut bricoler...
veut-on faire réaliser un vrai calcul : bc est la moins pire des solutions.
Connected \o/
Welcome to sHell. · eval is evil.
En ligne