#26 Le 05/11/2015, à 13: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, à 14:05)
Hors ligne
#27 Le 05/11/2015, à 14: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, à 14: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, à 14: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
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, à 14:23)
Hors ligne
#30 Le 05/11/2015, à 14:23
- sebastien29800
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
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, à 14: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, à 14: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, à 14:27)
Hors ligne
#33 Le 05/11/2015, à 14: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, à 14:46)
Hors ligne
#34 Le 05/11/2015, à 14: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, à 15: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, à 15:05)
Hors ligne
#36 Le 05/11/2015, à 16:07
- sebastien29800
Re : extraire 4 chiffres après une lettre dans une ligne de caractère
merci !!!!!!
Hors ligne
#37 Le 05/11/2015, à 16: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, à 18:06
- Hizoka
Re : extraire 4 chiffres après une lettre dans une ligne de caractère
en bash
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 05/11/2015, à 23: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
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, à 03:26)
Hors ligne
#40 Le 06/11/2015, à 08: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, à 08: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, à 13: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.
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
Hors ligne
#43 Le 09/11/2015, à 08: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 , merci
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#44 Le 10/11/2015, à 18: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, à 19: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, à 19: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, à 19: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, à 19: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, à 20: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 !!!!
Hors ligne
#50 Le 11/11/2015, à 09: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, à 09:13)
Hors ligne