OVH Cloud OVH Cloud

[Shell] Substitution noms de mois / numeros

2 réponses
Avatar
Thomas Lemoine
J'ai sur l'entrée standard des lignes qui arrivent avec dedans des noms
de mois abrégés en anglais (Jan, Feb, Mar...). Je voudrais les remplacer
par leurs numéros.

Mon côté goret se dit qu'il pourrait faire :
sed 's/Jan/01/' | sed 's/Feb/02/' | ... | sed 's/Dec/12/'

Mais mon côté moins goret se dit que c'est quand même lourd et pas beau
et qu'il doit bien y avoir moyen de faire mieux. J'ai regardé sed, awk,
tr, je ne vois pas bien comment procéder. Quelqu'un a une idée ?

NB : plus précisément, les lignes qui arrivent sur l'entrée standard
sont des dates au format '22/Sep/03'. Il n'y a donc qu'un nom de mois
par ligne, ce qui me fait trouver d'autant plus goret le chaînage de sed
ci-dessus.

--
All your DNS are belong to us:
http://homepages.tesco.net./~J.deBoynePollard/Humour/somebody-set-up-us-the-bind.html

2 réponses

Avatar
Thomas Lemoine
Stephane CHAZELAS nous racontait...

awk -F / '{
printf("%s/%02d/%sn",$1,(index("JanFebMarApr...",$2)+2)/3,$3)
}'


Excellent ! Merci beaucoup.

Donc c'était un problème de user qui sait pas faire et pas d'outil
inadapté. J'aurais dû m'en douter :)

--
All your DNS are belong to us:
http://homepages.tesco.net./~J.deBoynePollard/Humour/somebody-set-up-us-the-bind.html

Avatar
michel-merlin
Thomas Lemoine a écrit le 22/09/2003 à 18h17 :
J'ai sur l'entrée standard des lignes qui arrivent avec dedans des noms
de mois abrégés en anglais (Jan, Feb, Mar...). Je voudrais les
remplacer
par leurs numéros.

Mon côté goret se dit qu'il pourrait faire :
sed 's/Jan/01/' | sed 's/Feb/02/' | ... | sed 's/Dec/12/'

Mais mon côté moins goret se dit que c'est quand même lourd
et pas beau
et qu'il doit bien y avoir moyen de faire mieux. J'ai regardé sed, awk,
tr, je ne vois pas bien comment procéder. Quelqu'un a une idée ?

NB : plus précisément, les lignes qui arrivent sur
l'entrée standard
sont des dates au format '22/Sep/03'. Il n'y a donc qu'un nom de mois
par ligne, ce qui me fait trouver d'autant plus goret le chaînage de sed
ci-dessus.

--
All your DNS are belong to us:
http://homepages.tesco.net./~J.deBoynePollard/Humour/somebody-set-up-us-the-bind.html


La RFC2822 impose de désigner les mois par leurs NOMS
~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
Je pense qu'il vaudrait mieux conserver les abréviations que vous recevez, qui sont maintenant le standard international (abréviations d'origine anglaise, en 3 lettres capitalisées, "Jan Feb ... Dec"), bien connu de tous les hommes de la terre, et ne risquant pas d'erreur à la lecture.

C'est ce qui est fait depuis les débuts du net dans les headers de 99% des messages email de la terre, comme vous pouvez le vérifier dans vos messages entrants, en ouvrant leur source ("Ctrl+F3" dans Outlook Express).

Les emails appliquent ainsi la RFC2822 §3.3 http://tools.ietf.org/html/rfc2822#section-3.3 "Date and Time Specification", qui IMPOSE de désigner les mois par leurs noms abrégés standard (anglais 3 lettres capitalisées), excluant ainsi les numéros, les noms entiers (incitant à des troncatures) ou en autres langues (compris par trop peu de gens).

Détails dans http://www.sitepoint.com/forums/showthread.php?tE0107#post3243632 "PST and PDT; TZ and TOG; UTC and GMT; Internet Date & Time; PHP date" (Tue 16 Jan 2007 14:04:05 GMT).

La désignation des mois par leurs numéros est une des causes principales d'erreurs de lecture sur le web, par exemple "01/02/03" sera lu comme "1 Feb 2003" par un Européen, "2 Jan 2003" par un Américain ou Japonais, "3 Feb 2001" par un Néo-zélandais.

L'emploi d'autres langues obligerait chaque personne à connaître les mois dans ~150 langues ; voir par exemple http://support.mozilla.com/tiki-view_forum_thread.php?forumId=1&comments_parentId 5050#threadId216231 "Standard display of Date & Time please" où la date affichée était "12 Kas 2008 Wed". Aujourd'hui elle est "mer. 12 de nov., 2008" pour moi, et probablement l'homologue pour les autres lecteurs, mais en restant variable elle empêche dans les threads longs et à audience internationale de mentionner un post par sa date. Tout ces problèmes seraient balayés si Mozilla appliquait ses propres déclarations (se conformer aux standards, ici la RFC2822).

Versailles, Sun 18 Jan 2009 17:06:30 +0100