#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 !!!
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 !! ;)
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
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}"
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