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 25/10/2015, à 18:46

sebastien29800

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

bonjour,

soit la variable contenant la ligne de caractères suivante, je n'arrive pas à isoler dans une variable les 4 chiffres après le Q. =  1019

infometar = "LFRB 251730Z 12005KT 9999 FEW038 10/05 Q1019 NOSIG"

je ne maîtrise pas vraiment Awk, Sed et Cut !!

merci beaucoup pour votre aide !

Hors ligne

#2 Le 25/10/2015, à 18:53

pingouinux

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

Bonjour,

infometar="LFRB 251730Z 12005KT 9999 FEW038 10/05 Q1019 NOSIG"
chiffres=$(sed -r 's/.*Q([0-9]{4}).*/\1/' <<<"$infometar")
echo "chiffres=$chiffres"

Ajouté : Deux autres méthodes

chiffres=$(grep -Po '(?<=Q)[0-9]{4}' <<<"$infometar")
chiffres=$(awk -FQ '{gsub(" .*","",$2); print $2}' <<<"$infometar")

Dernière modification par pingouinux (Le 25/10/2015, à 19:23)

Hors ligne

#3 Le 25/10/2015, à 19:35

sebastien29800

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

bonjour,

merci beaucoup c'est parfait, je ne l'aurais pas trouvé seul !!!  neutral

Hors ligne

#4 Le 25/10/2015, à 19:55

sebastien29800

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

rebonjour,

et dans le même style, comment puis je récupérer les 2 chiffres avant le /   ?  (il s'agit de la température)

merci encore

Hors ligne

#5 Le 25/10/2015, à 20:08

pingouinux

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

temperature=$(sed -r 's#.* ([0-9]+)/.*#\1#' <<<"$infometar")

Hors ligne

#6 Le 26/10/2015, à 12:37

sebastien29800

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

merci beaucoup, parfait une fois de plus
n'a pas l'air facile de maîtriser sed et autre !!

Hors ligne

#7 Le 26/10/2015, à 12:40

credenhill

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

hello
et aussi

$ infometar="LFRB 251730Z 12005KT 9999 FEW038 10/05 Q1019 NOSIG"
$ read T Q < <(awk -F "[ Q/]" '{print $6, $9}' <<<"$infometar=")
$ echo $Q $T
1019 10

Hors ligne

#8 Le 26/10/2015, à 12:46

sebastien29800

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

merci !!!

Hors ligne

#9 Le 27/10/2015, à 15:53

sebastien29800

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

rebonjour, j'ai voulu me lancer aussi en m'aidant de vos lignes de code mais je rencontre un problème

soit la variable suivante : infometar = "LFRB 271430Z VRB02KT 9999 SCT010 SCT021 BKN083 12/10 Q1006 NOSIG"

j'ai voulu récupérer la vitesse du vent (les 2 chiffres qui se trouvent avant KT ) et l'origine du vent, les 3 caractères devant la vitesse du vent. mais ça ne marche pas (vitesse 02 et origine du vent VRB (ça peut être aussi 3 chiffres))

pouvez vous m'aider ?

merci

mes codes :

vent=`echo $infometar | sed -r 's#.* ([0-9]+)KT.*#\1#' | cut -c '1-3'`
vitesseventmoy=`echo $infometar | sed -r 's#.* ([0-9]+)KT.*#\1#' | cut -c '4-5'`

Hors ligne

#10 Le 27/10/2015, à 16:22

pingouinux

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

$ echo "$infometar" | sed -r 's#.*[^0-9]([0-9]+)KT.*#\1#'
02

$ echo "$infometar" | sed -r 's#.* ([^0-9]+)[0-9]+KT.*#\1#'
VRB

Hors ligne

#11 Le 27/10/2015, à 16:30

Hizoka

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

Salut, si c'est toujours placé au même endroit on peut faire ça :

infometar="LFRB 271430Z VRB02KT 9999 SCT010 SCT021 BKN083 12/10 Q1006 NOSIG"

infos="${infometar#* * }"
infos="${infos%% *}"
info1="${infos:0:3}"
info2="${infos:3:2}"
echo "${info1} et ${info2}"

S'il n'y a qu'un seul KT :

infometar="LFRB 271430Z VRB02KT 9999 SCT010 SCT021 BKN083 12/10 Q1006 NOSIG"

infos="${infometar%%KT*}"
infos="${infos##* }"
info1="${infos:0:3}"
info2="${infos:3:2}"
echo "${info1} et ${info2}"

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

Hors ligne

#12 Le 27/10/2015, à 16:31

MicP

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

michel@debG53SW:~$ infometar="LFRB 271430Z VRB123KT 9999 SCT010 SCT021 BKN083 12/10 Q1006 NOSIG"
michel@debG53SW:~$ sed -n 's/.*VRB\([0-9]\{1,3\}\)KT.*/\1/p' <<< $infometar
123
michel@debG53SW:~$ 
michel@debG53SW:~$ infometar="LFRB 271430Z VRB12KT 9999 SCT010 SCT021 BKN083 12/10 Q1006 NOSIG"
michel@debG53SW:~$ sed -n 's/.*VRB\([0-9]\{1,3\}\)KT.*/\1/p' <<< $infometar
12
michel@debG53SW:~$ 
michel@debG53SW:~$ infometar="LFRB 271430Z VRB1KT 9999 SCT010 SCT021 BKN083 12/10 Q1006 NOSIG"
michel@debG53SW:~$ sed -n 's/.*VRB\([0-9]\{1,3\}\)KT.*/\1/p' <<< $infometar
1
michel@debG53SW:~$ 
michel@debG53SW:~$ infometar="LFRB 271430Z VRBKT 9999 SCT010 SCT021 BKN083 12/10 Q1006 NOSIG"
michel@debG53SW:~$ sed -n 's/.*VRB\([0-9]\{1,3\}\)KT.*/\1/p' <<< $infometar
michel@debG53SW:~$ 
michel@debG53SW:~$ infometar="LFRB 271430Z VRB1234KT 9999 SCT010 SCT021 BKN083 12/10 Q1006 NOSIG"
michel@debG53SW:~$ sed -n 's/.*VRB\([0-9]\{1,3\}\)KT.*/\1/p' <<< $infometar
michel@debG53SW:~$ 

Dernière modification par MicP (Le 27/10/2015, à 16:34)

Hors ligne

#13 Le 27/10/2015, à 17:46

sebastien29800

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

rebonjour,

merci à tous mais le résultat n'est pas tout a fait ce que j'attendais, je me suis mal exprimé

voici deux lignes d'exemple :

 infometar = "LFRB 271430Z VRB02KT 9999 SCT010 SCT021 BKN083 12/10 Q1006 NOSIG"
 infometar = "LFRB 271630Z 18007KT 8000 FEW021TCU SCT025 13/11 Q1006 NOSIG"

en effet, je cherche à isoler les 2 chiffres à gauche de KT (02 ou 07) et les 3 chiffres ou lettres à gauche de KT (VRB ou 180)/ ces chiffres et lettres se trouveront toujours à gauche de KT

merci encore

Hors ligne

#14 Le 27/10/2015, à 17:55

pingouinux

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

echo "$infometar" | sed -r 's#.*([0-9]{2})KT.*#\1#'
echo "$infometar" | sed -r 's#.* ([^ ]+)[0-9]{2}KT.*#\1#'

Hors ligne

#15 Le 27/10/2015, à 18:10

sebastien29800

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

parfait, merci à tous et à pingouinux qui a été plus rapide !!  wink;)

Hors ligne

#16 Le 27/10/2015, à 18:24

MicP

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

Finalement, je la remet quand même (au cas où VRB et 180 soient des critères de recherche importants)

sed -n 's/.*\(180\|VRB\)\([0-9]\{2\}\)KT.*/\2/p'
sed -nr 's#.*(VRB|180)([0-9]{2})KT.*#\2#p'

Dernière modification par MicP (Le 27/10/2015, à 18:44)

Hors ligne

#17 Le 27/10/2015, à 18:32

sebastien29800

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

merci MicP

Hors ligne

#18 Le 28/10/2015, à 08:10

Hizoka

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

ce que je t'avais proposé fonctionnait tongue


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

Hors ligne

#19 Le 28/10/2015, à 08:33

sebastien29800

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

en effet  Hizoka,

mais en regardant le code, j'ai cru comprendre que c'était en fonction des champs mais le nombre de champs peut changer
je préfère donc me baser sur le KT

cependant, merci beaucoup pour ton aide et cela m'aidera surement pour la suite

Hors ligne

#20 Le 28/10/2015, à 17:56

Hizoka

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

ce que fait bien :

infos="${infometar%%KT*}"
infos="${infos##* }"
info1="${infos:0:3}"
info2="${infos:3:2}"
echo "${info1} et ${info2}"

tongue

enfin le principal c'est que tu ais réussis, bonne continuation.


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

Hors ligne

#21 Le 28/10/2015, à 22:00

MicP

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

Je ne peux m'empêcher de dire que la solution proposée par Hizoka est la plus économique.

Et en plus elle est POSIX (Voir en bas du paragraphe 2.6.2 Parameter Expansion)

Mais bien sûr tout dépends surtout du contexte dans lequel sebastien29800 peut ou veut extraire ces caractères.

Dernière modification par MicP (Le 29/10/2015, à 02:34)

Hors ligne

#22 Le 05/11/2015, à 12:24

sebastien29800

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

bonjour, je galère encore, je croyais avoir compris mais je n'arrive pas à extraire les 2 chiffres après le / donc 10

 infometar = "LFRB 271430Z VRB02KT 9999 SCT010 SCT021 BKN083 12/10 Q1006 NOSIG"

un coup de main me serait bien utile !!

merci

Hors ligne

#23 Le 05/11/2015, à 12:59

MicP

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

michel@debG53SW:~$ infometar="LFRB 271430Z VRB02KT 9999 SCT010 SCT021 BKN083 12/10 Q1006 NOSIG"
michel@debG53SW:~$ sed -nr 's#.* 12/([0-9]{2}) .*#\1#p' <<< $infometar
10
michel@debG53SW:~$ 

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

Hors ligne

#24 Le 05/11/2015, à 13:12

sebastien29800

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

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

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

Dernière modification par sebastien29800 (Le 05/11/2015, à 13:12)

Hors ligne

#25 Le 05/11/2015, à 13:19

pingouinux

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

Essaye ceci

sed -r 's#.*/([0-9]+).*#\1#'  <<<"$infometar"

Hors ligne