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.

#26 Le 05/11/2015, à 14:59

MicP

Re : extraire 4 chiffres après une lettre dans une ligne de caractère

…merci MicP, mais la ligne ne me renvoie rien  :-(…

Pourrais-tu vérifier ce que contient effectivement la variable infometar avant de lui appliquer la commande sed ?

infometar=`metar lfrb`
echo $infometar
sed -nr 's#.* 12/([0-9]{2}) .*#\1#p' <<< $infometar

ensuite, juste pour tester :

infometar="LFRB 271430Z VRB02KT 9999 SCT010 SCT021 BKN083 12/10 Q1006 NOSIG"
echo $infometar
sed -nr 's#.* 12/([0-9]{2}) .*#\1#p' <<< $infometar   #  MicP
sed -r 's#.*/([0-9]+).*#\1#'  <<<"$infometar"         #  pingouinux

Merci.

Dernière modification par MicP (Le 05/11/2015, à 15:05)

Hors ligne

#27 Le 05/11/2015, à 15:04

sebastien29800

Re : extraire 4 chiffres après une lettre dans une ligne de caractère

bonjour, la solution de pingouinux fonctionne.
merci à MicP

pour MicP, metar est un paquet que l'on peut installe. il permet de récupérer le "metar", c'est a dire une ligne regroupant les informations météorologiques des aéroports 'LFRB aéroport de Brest Guipavas"

merci encore

Hors ligne

#28 Le 05/11/2015, à 15:06

Postmortem

Re : extraire 4 chiffres après une lettre dans une ligne de caractère

[HS]
@sebastien29800 : salut homonyme voisin !
[/HS]


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#29 Le 05/11/2015, à 15:11

MicP

Re : extraire 4 chiffres après une lettre dans une ligne de caractère

Alors je suppose que le copié/collé dans le message sur ce forum avait du transformé les caractères de séparation en espace

Essaye de savoir quels sont ces caractères de séparation avec hexdump

infometar=`metar lfrb`
hexdump -C <<< $infometar

Voilà ce que ça donne avec un copié/collé de la ligne donnée dans ton post :

michel@debG53SW:~$ infometar="LFRB 271430Z VRB02KT 9999 SCT010 SCT021 BKN083 12/10 Q1006 NOSIG"
michel@debG53SW:~$ hexdump -C <<< $infometar
00000000  4c 46 52 42 20 32 37 31  34 33 30 5a 20 56 52 42  |LFRB 271430Z VRB|
00000010  30 32 4b 54 20 39 39 39  39 20 53 43 54 30 31 30  |02KT 9999 SCT010|
00000020  20 53 43 54 30 32 31 20  42 4b 4e 30 38 33 20 31  | SCT021 BKN083 1|
00000030  32 2f 31 30 20 51 31 30  30 36 20 4e 4f 53 49 47  |2/10 Q1006 NOSIG|
00000040  0a                                                |.|
00000041
michel@debG53SW:~$ 

On voit bien un caractère 20 <=> caractère espace

=======

…pour MicP, metar est un paquet que l'on peut installe. il permet de récupérer le "metar", c'est a dire une ligne regroupant les informations météorologiques des aéroports 'LFRB aéroport de Brest Guipavas"…

Merci pour l'information smile
Je pratique Flight simulator avec l'actualisation des paramètres météo tous les 1/4 d'heure, alors j'avais bien compris de quoi il s'agissait,
mais effectivement, je n'ai pas installé le paquetage metar

Dernière modification par MicP (Le 05/11/2015, à 15:23)

Hors ligne

#30 Le 05/11/2015, à 15:23

sebastien29800

Re : extraire 4 chiffres après une lettre dans une ligne de caractère

MicP a écrit :

Alors je suppose que le copié/collé dans le message sur ce forum avait du transformé les caractères de séparation en espace

Essaye de savoir quels sont ces caractères de séparation avec hexdump

infometar=`metar lfrb`
hexdump -C <<< $infometar

Voilà ce que ça donne avec un copié/collé de la ligne donnée dans ton post :

michel@debG53SW:~$ infometar="LFRB 271430Z VRB02KT 9999 SCT010 SCT021 BKN083 12/10 Q1006 NOSIG"
michel@debG53SW:~$ hexdump -C <<< $infometar
00000000  4c 46 52 42 20 32 37 31  34 33 30 5a 20 56 52 42  |LFRB 271430Z VRB|
00000010  30 32 4b 54 20 39 39 39  39 20 53 43 54 30 31 30  |02KT 9999 SCT010|
00000020  20 53 43 54 30 32 31 20  42 4b 4e 30 38 33 20 31  | SCT021 BKN083 1|
00000030  32 2f 31 30 20 51 31 30  30 36 20 4e 4f 53 49 47  |2/10 Q1006 NOSIG|
00000040  0a                                                |.|
00000041
michel@debG53SW:~$ 

On voit bien un caractère 20 <=> caractère espace

=======

…pour MicP, metar est un paquet que l'on peut installe. il permet de récupérer le "metar", c'est a dire une ligne regroupant les informations météorologiques des aéroports 'LFRB aéroport de Brest Guipavas"…

Merci pour l'information smile
Je pratique Flight simulator avec l'actualisation des paramètres météo tous les 1/4 d'heure, alors j'avais bien compris de quoi il s'agissait,
mais effectivement, je n'ai pas installé le paquetage metar


c'est bien 20 aussi

infometar=`metar lfrb`
sebastien@Linux-Bas:~$ hexdump -C <<< $infometar
00000000  4c 46 52 42 20 30 35 31  32 33 30 5a 20 31 39 30  |LFRB 051230Z 190|
00000010  32 31 47 33 31 4b 54 20  39 39 39 39 20 33 30 30  |21G31KT 9999 300|
00000020  30 57 20 2d 52 41 20 42  4b 4e 30 30 34 20 31 35  |0W -RA BKN004 15|
00000030  2f 31 34 20 51 31 30 31  30 20 4e 4f 53 49 47 0a  |/14 Q1010 NOSIG.|
00000040

Hors ligne

#31 Le 05/11/2015, à 15:24

sebastien29800

Re : extraire 4 chiffres après une lettre dans une ligne de caractère

rebonjour,

comment puis je faire des calculs avec virgule car

 echo $((10/3))

donne 3 et non 3.333333333333 ?

merci

Hors ligne

#32 Le 05/11/2015, à 15:26

MicP

Re : extraire 4 chiffres après une lettre dans une ligne de caractère

Ok, j'avais compris : après le " 12/" alors que c'était bien : après le "/"

Désolé : J'ai (mal) interprété la demande.
Mea culpa.

Dernière modification par MicP (Le 05/11/2015, à 15:27)

Hors ligne

#33 Le 05/11/2015, à 15:30

MicP

Re : extraire 4 chiffres après une lettre dans une ligne de caractère

…calculs avec virgule…

michel@debG53SW:~$ echo "scale=12;10/3" | bc
3.333333333333
michel@debG53SW:~$ echo "scale=24;10/3" | bc
3.333333333333333333333333
michel@debG53SW:~$ 
michel@debG53SW:~$ bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'. 
scale=3
10/3
3.333
scale=32
10/3
3.33333333333333333333333333333333
quit
michel@debG53SW:~$ 

Dernière modification par MicP (Le 05/11/2015, à 15:46)

Hors ligne

#34 Le 05/11/2015, à 15:48

pingouinux

Re : extraire 4 chiffres après une lettre dans une ligne de caractère

Ou alors

$ bc -l <<<"10/3"
3.33333333333333333333

Hors ligne

#35 Le 05/11/2015, à 16:03

MicP

Re : extraire 4 chiffres après une lettre dans une ligne de caractère

J'avais même pas remarqué que le fait de spécifier l'option mathlib positionne le nombre de décimales par défaut à 20.
Quand j'utilisais bc, je la spécifiais de toutes façons.

Merci pour l'info.

Dernière modification par MicP (Le 05/11/2015, à 16:05)

Hors ligne

#36 Le 05/11/2015, à 17:07

sebastien29800

Re : extraire 4 chiffres après une lettre dans une ligne de caractère

merci !!!!!!

Hors ligne

#37 Le 05/11/2015, à 17:38

credenhill

Re : extraire 4 chiffres après une lettre dans une ligne de caractère

hello
et aussi

$ dc <<<"6 k 10 3 / p"
3.333333

Hors ligne

#38 Le 05/11/2015, à 19:06

Hizoka

Re : extraire 4 chiffres après une lettre dans une ligne de caractère

en bash tongue

infometar="LFRB 271430Z VRB02KT 9999 SCT010 SCT021 BKN083 12/10 Q1006 NOSIG"
info="${infometar##*/}"
info="${info%% *}"
echo "${info}"

KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#39 Le 06/11/2015, à 00:58

MicP

Re : extraire 4 chiffres après une lettre dans une ligne de caractère

…extraire les 2 chiffres après le / donc 10…

en bash aussi tongue

michel@debG53SW:~$ infometar="LFRB 271430Z VRB02KT 9999 SCT010 SCT021 BKN083 12/10 Q1006 NOSIG"
michel@debG53SW:~$ [[ "$infometar" =~ /(.{2}) ]]
michel@debG53SW:~$ echo ${BASH_REMATCH[1]}
10
michel@debG53SW:~$ 

=======
EDIT: Voilà voilà…

infometar="LFRB 251730Z 12005KT 9999 FEW038 10/M05 Q1019 NOSIG"
[[ "$infometar" =~ ([[:alnum:]]{1,4}).*([[:num:]]{2})([[:num:]]{2})([[:num:]]{2})Z.*([[:num:]]{3})([[:num:]]{2})KT.*(M{0,1}[[:num:]]{2})/(M{0,1}[[:num:]]{2}).*Q([[:num:]]{4}) ]]
echo -e "\n \
OACI\t\t\t: ${BASH_REMATCH[1]}\n \
Jour du mois en cours\t: ${BASH_REMATCH[2]}\n \
Heure\t\t\t: ${BASH_REMATCH[3]}:${BASH_REMATCH[4]}\n \
Direction du vent\t: ${BASH_REMATCH[5]} °\n \
Vitesse\t\t: ${BASH_REMATCH[6]} nœuds\n \
Température\t\t: ${BASH_REMATCH[7]//M/-} °C\n \
Point de rosée\t\t: ${BASH_REMATCH[8]//M/-} °C\n \
Pression\t\t: ${BASH_REMATCH[9]} hPa\n"

Ce qui donne :

michel@debG53SW:~$ infometar="LFRB 251730Z 12005KT 9999 FEW038 10/M05 Q1019 NOSIG"
michel@debG53SW:~$ [[ "$infometar" =~ ([[:alnum:]]{1,4}).*([[:num:]]{2})([[:num:]]{2})([[:num:]]{2})Z.*([[:num:]]{3})([[:num:]]{2})KT.*(M{0,1}[[:num:]]{2})/(M{0,1}[[:num:]]{2}).*Q([[:num:]]{4}) ]]
michel@debG53SW:~$ echo -e "\n \
> OACI\t\t\t: ${BASH_REMATCH[1]}\n \
> Jour du mois en cours\t: ${BASH_REMATCH[2]}\n \
> Heure\t\t\t: ${BASH_REMATCH[3]}:${BASH_REMATCH[4]}\n \
> Direction du vent\t: ${BASH_REMATCH[5]} °\n \
> Vitesse\t\t: ${BASH_REMATCH[6]} nœuds\n \
> Température\t\t: ${BASH_REMATCH[7]//M/-} °C\n \
> Point de rosée\t\t: ${BASH_REMATCH[8]//M/-} °C\n \
> Pression\t\t: ${BASH_REMATCH[9]} hPa\n"

 OACI			: LFRB
 Jour du mois en cours	: 25
 Heure			: 17:30
 Direction du vent	: 120 °
 Vitesse		: 05 nœuds
 Température		: 10 °C
 Point de rosée		: -05 °C
 Pression		: 1019 hPa

michel@debG53SW:~$ 

=======
Mais bon.
Si le but est d'afficher les mesures récupérées depuis la même station (OACI), la méthode de Hizoka est quand même la plus simple à mettre en œuvre :

michel@debG53SW:~$ infometar="LFRB 251730Z 12005KT 9999 FEW038 10/05 Q1019 NOSIG"
michel@debG53SW:~$ affich="OACI\t\t: ${infometar:0:4}\nDate\t\t: ${infometar:5:2}/$(date +%m)/$(date +%Y)\nHeure\t\t: ${infometar:7:2}:${infometar:9:2}\n"
michel@debG53SW:~$ affich="${affich}Direction vent\t: ${infometar:13:3}°\nVitesse vent\t: ${infometar:16:2} nœuds\nTempérature\t: ${infometar:33:2}°C\n"
michel@debG53SW:~$ echo -e "${affich}Point de rosée\t: ${infometar:36:2}°C\nPression\t: ${infometar:40:4}hPa"
OACI		: LFRB
Date		: 25/11/2015
Heure		: 17:30
Direction vent	: 120°
Vitesse vent	: 05 nœuds
Température	: 10°C
Point de rosée	: 05°C
Pression	: 1019hPa
michel@debG53SW:~$ 

Et puis, on a aussi la même chose avec l'option -d de la commande metar
qui, bien qu'en anglais, décodera les données de façon plus fiable.

Par exemple, si la température descends en dessous de zéro, ça pourrait se présenter comme ça :
LFRB 251730Z 12005KT 9999 FEW038 M04/M05 Q1019 NOSIG

De plus, si certains capteurs sont en panne, les données seraient remplacées par des suites de /

=======
Essaye ça :

OACIs=(LFBF LFAT LFRB LFPB LFQI LEBB LEBG LEMG LGAV LGIR LGKR LRBS LRTR LYBE LZKZ LZIB LMML AGGC AYGN BGKK BIAR UHWW)
for oaci in ${OACIs[@]};do metar $oaci;done

Dernière modification par MicP (Le 10/11/2015, à 04:26)

Hors ligne

#40 Le 06/11/2015, à 09:29

Hizoka

Re : extraire 4 chiffres après une lettre dans une ligne de caractère

merci pour le ${BASH_REMATCH} que je ne connaissais pas !
Vraiment pas mal ça !


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#41 Le 06/11/2015, à 09:40

pingouinux

Re : extraire 4 chiffres après une lettre dans une ligne de caractère

@MicP : La méthode que tu montres en #39 est inspirée de celle de Hizoka (#11 ou #20), pas de la mienne.

Hors ligne

#42 Le 06/11/2015, à 14:47

MicP

Re : extraire 4 chiffres après une lettre dans une ligne de caractère

> @Hizoka Vraiment désolé : Une énorme erreur citation due à un copié collé. À cette heure là, ce devait sans doute être la fatigue.

Hizoka a écrit :

merci pour le ${BASH_REMATCH} que je ne connaissais pas !
Vraiment pas mal ça !

En lisant tes messages sur le forum, j'en ai sans doute beaucoup plus appris que toi des miens smile

Hors ligne

#43 Le 09/11/2015, à 09:28

Hizoka

Re : extraire 4 chiffres après une lettre dans une ligne de caractère

En lisant tes messages sur le forum, j'en ai sans doute beaucoup plus appris que toi des miens

Ça, ça fait plaisir smile , merci


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#44 Le 10/11/2015, à 19:50

sebastien29800

Re : extraire 4 chiffres après une lettre dans une ligne de caractère

bonjour, je reviens vers vous car je rencontre un nouveau problème.

j'initialise la variable suivante :

vitesseventmoy=$[vitesseventmoy*1652/1000]

$vitesseventmoy peut être égale à 10 15 18 etc...... et là, ça fonctionne
cependant, elle peut être égale à 08 02 05 etc et là le 0 dérange : 

bash: 08 : valeur trop grande pour la base (le symbole erroné est "08")

comment supprimer le 0 s'il existe ?

merci

Hors ligne

#45 Le 10/11/2015, à 20:25

pingouinux

Re : extraire 4 chiffres après une lettre dans une ligne de caractère

Bonsoir,
C'est parce qu'il considère un nombre commençant par un zéro comme de l'octal, et 8 n'est pas un chiffre octal.

$ x=000807; y=$(sed 's/^0\+//' <<<$x); echo $y
807

Hors ligne

#46 Le 10/11/2015, à 20:28

sebastien29800

Re : extraire 4 chiffres après une lettre dans une ligne de caractère

merci beaucoup, comment pourrais je l’intégrer dans ma ligne du dessus sans recréer de variable ?

Hors ligne

#47 Le 10/11/2015, à 20:53

sebastien29800

Re : extraire 4 chiffres après une lettre dans une ligne de caractère

ok c'est bon, merci beaucoup, j'ai fais ça  (pas très propre peut être mais bon, ça marche)

vitesseventmoy=$(sed 's/^0\+//' <<<$vitesseventmoy)

Hors ligne

#48 Le 10/11/2015, à 20:55

pingouinux

Re : extraire 4 chiffres après une lettre dans une ligne de caractère

$ vitesseventmoy=08; vitesseventmoy=$[$(sed 's/^0\+//' <<<$vitesseventmoy)*1652/1000]; echo $vitesseventmoy
13

ou bien, en définissant la fonction nozero

$ nozero() { echo $(sed 's/^0\+//' <<<$1); }
$ vitesseventmoy=08; vitesseventmoy=$[$(nozero $vitesseventmoy)*1652/1000]; echo $vitesseventmoy
13

Hors ligne

#49 Le 10/11/2015, à 21:00

sebastien29800

Re : extraire 4 chiffres après une lettre dans une ligne de caractère

wouah c'est super cette histoire de fonction, ne connaissais pas.
en gros, tu creais une fonction puis tu peux l'intégrer là ou tu veux.
j'ai l'air bête mais bon, ne suis pas un pro du bash !!!!  wink

Hors ligne

#50 Le 11/11/2015, à 10:11

credenhill

Re : extraire 4 chiffres après une lettre dans une ligne de caractère

ou aussi

$ vitesseventmoy=08; vitesseventmoy=$((${vitesseventmoy##*(0)}*1652/1000)); echo $vitesseventmoy
13

Dernière modification par credenhill (Le 11/11/2015, à 10:13)

Hors ligne