AWK code explication

Résolu/Fermé
Tuoxy Messages postés 2 Date d'inscription samedi 10 décembre 2022 Statut Membre Dernière intervention 10 décembre 2022 - Modifié le 13 déc. 2022 à 15:28
mamiemando Messages postés 33363 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 16 novembre 2024 - 15 déc. 2022 à 13:23

Bonjour,

Je souhaite extraire des données de événement_ics1 et évènement_ics2 en les rangeant dans deux variables date1 et heure1

J'ai essayé :

date1 = gensub(/^(\[:digit:]{8}).*/, "\\1", "", evenement_ics1)
heure1 = gensub(/.*(\d{6})$/, "\\1", "", evenement_ics1)

Sans succès...


Macintosh / Safari 16.1

A voir également:

4 réponses

jee pee Messages postés 40456 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 17 novembre 2024 9 420
10 déc. 2022 à 17:36

Sinon, dans une expression régulière, tu pourrais utiliser T et Z comme séparateurs des 2 chaines recherchées.

gawk '
 BEGIN {
   ev1="20211031T080000Z";
   date1 = gensub(/(.+)T(.+)Z/, "\\1", "g", ev1);
   time1 = gensub(/(.+)T(.+)Z/, "\\2", "g", ev1);
   print date1, time1;
 }'

1
jee pee Messages postés 40456 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 17 novembre 2024 9 420
Modifié le 10 déc. 2022 à 16:51

Bonjour,

Tu as des contraintes sur les commandes à utiliser ? Car pourquoi sur une chaine de longueur fixe s’embêter avec une expression régulière, on peut utiliser un cut

ev1="20211031T080000Z"
date1=`echo $ev1|cut -c 1-8`

0
Tuoxy Messages postés 2 Date d'inscription samedi 10 décembre 2022 Statut Membre Dernière intervention 10 décembre 2022
10 déc. 2022 à 17:45

Merci beaucoup. Oui je ne pouvais pas utiliser cut sinon ça serait déjà fait.

0
jee pee Messages postés 40456 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 17 novembre 2024 9 420
10 déc. 2022 à 17:49

Avec comme base ta syntaxe, on peut avoir

gawk '
 BEGIN {
   ev1="20211031T080000Z";
   date1 = gensub(/^([0-9]{8}).*/, "\\1", "g", ev1)
   heure1 = gensub(/.*([0-9]{6}).$/, "\\1", "g", ev1)
   print date1, heure1;

}'
0
mamiemando Messages postés 33363 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 16 novembre 2024 7 801
15 déc. 2022 à 13:23

En awk pur :

 awk '
 BEGIN {
   ts = "20211031T080000Z";
   yyyymmdd = substr(ts, 1, 8);
   yyyy = substr(yyyymmdd, 1, 4);
   mm = substr(yyyymmdd, 5, 2); dd = substr(yyyymmdd, 7, 2);
   print yyyymmdd;
   print yyyy;
   print mm;
   print dd;
}'
0