Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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.

Hors 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.

Hors 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

lol lol
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 22.04, 22.04, 23.04
Portable1 : Intel(R) Core(TM)2 Duo CPU     T6570  @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 23.04 ( 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 résolu, 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. lol


Connected \o/
Welcome to sHell. · eval is evil.

Hors 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 smile

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... big_smile
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 résolu, 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.

Hors 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 ?
tongue

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

lol lol
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 22.04, 22.04, 23.04
Portable1 : Intel(R) Core(TM)2 Duo CPU     T6570  @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 23.04 ( 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. hmm

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.

Hors ligne