Léa-Linux & amis :   LinuxFR   GCU-Squad   GNU
modifier le format de dates avec sed

Bonjour à tous,

J'ai des fichiers :
Citation

cat fichier01
Bla: blabla
Date: Sun, 26 Oct 2008 03:08:03 +0100 (CET)
bli: blibli

cat fichier02
Bla: blabla
Date: Wed, 29 Oct 2008 07:11:23 -0400
Bli: blibli

...

dans lesquels les formats de dates ne sont pas les mêmes :
Citation

Sun, 26 Oct 2008 03:08:03 +0100 (CET)
Wed, 29 Oct 2008 07:11:23 -0400
Thu, 30 Oct 2008 17:47:18 -0700 (PDT)
Sun, 26 Oct 2008 02:27:26 GMT

Il faudrait que ces dates soient toutes au même format (UTC),
pour, ensuite, trier les fichiers selon un fuseau horaire unique,
qui respectera leur chronologie.

Est-ce clair, et sensé ?

J'utilise sed, parcequ'en fin de compte c'est lui qui fera le boulot de modifier les formats de dates dans les fichiers avant qu'ils soient triés.
En gros:
grep -R ^Date: /mon/répertoire | cut -d: -f3,4,5 | while read line; do 
sed 's/.*/'"$(date -u -d"$line")"'/'
done
mais ça renvoie autant de fois la première date convertie qu'il y a de lignes extraites par grep

...
?

Poste le Saturday 1 November 2008 09:52:45
Répondre     Citer    
Re: modifier le format de dates avec sed

Moi j'aurais plutot utilisé un truc qui "parse" la date et la retranscrit.

Cad traiter la date comme un type de donnée, pas une chaine de caractère.

Peut-être l'option -d de date avec l'option +


----

Basile STARYNKEVITCH

Membre de l'APRIL « promouvoir et défendre le logiciel libre » - adhérez vous aussi à l'APRIL!

Projet logiciel libre: RefPerSys

Poste le Saturday 1 November 2008 10:39:17
Répondre     Citer    
Re: modifier le format de dates avec sed

Je suis à peu près sûr de ne pas avoir compris.

Finalement, j'ajoute un pied aux fichier (ça marchera à cloche-pied ^^), qui contient l'enregistrement 'Date' des fichiers, converti en UTC (soit 'Date_UTC'), et sur lequel s'effectuera le tri des fichiers !

Donc les fichiers apparaissent dans l'ordre des date UTC, au lieu des dates locales ! Hi!
grep -R ^Date /mon/Repertoire | while read line; do a=$(echo $line | cut -d: -f1); b=$(echo $line | cut -d: -f3,4,5); echo "Date_UTC: $(date "+%F %R:%S" -u --date "$b")" >> $a; done 

Poste le Sunday 2 November 2008 08:47:56
Répondre     Citer    
Re: modifier le format de dates avec sed

un petit plus
grep -R ^Date /mon/Repertoire | while read a b; do echo "Date_UTC: $(date "+%F %R:%S" -u --date "$b")" >> $a; done
Ce qui n'apporte rien, mais allège un peu la ligne.

Mon problème initial reste entier : changer un "format" (aléatoire) de date par un autre (UTC), avec sed
...
?

Poste le Tuesday 4 November 2008 22:50:56
Répondre     Citer    
Re: modifier le format de dates avec sed

Bah !?
 grep -R ^Date: /mon/Repertoire | while read a b; do 
sed 's/^Date: .*/Date_UTC: '"$(date -u --date "$b")"'/' $(echo $a | sed 's/\([^:]*\)grinning smileyate:/\1/')
done

et hop
Citation

Bla: blabla
Date_UTC: dimanche 26 octobre 2008, 02:08:03 (UTC+0000)
Bli: blibli

Bla: blabla
Date_UTC: mercredi 29 octobre 2008, 11:11:23 (UTC+0000)
Bli: blibli
...
?

Poste le Tuesday 4 November 2008 23:54:30
Répondre     Citer    
Re: modifier le format de dates avec sed

Mon intuition était quelque chose comme
env LC_TIME=C TZ=GMT date -d 'Thu, 30 Oct 2008 17:47:18 -0700 (PDT)' +"%c"

Ca te parle plus?

----

Basile STARYNKEVITCH

Membre de l'APRIL « promouvoir et défendre le logiciel libre » - adhérez vous aussi à l'APRIL!

Projet logiciel libre: RefPerSys

Poste le Tuesday 4 November 2008 23:56:49
Répondre     Citer    
Re: modifier le format de dates avec sed

C'est (env LC_TIME=C TZ=GMT) ce que fait l'option -u de `date`, non ?

`sed` ne sert qu'à introduire la modification, réalisée par `date`, de la date contenue dans les fichiers vers/dans ces mêmes fichiers.

le 1 novembre 2008 à 09:52, j'écrivais (maladroitement: il manque quelque chose à sed sur quoi travailler (erreur, oubli, ?))
grep -R ^Date: /mon/répertoire | cut -d: -f3,4,5 | while read line; do 
sed 's/.*/'"$(date -u -d"$line")"'/'
done

Merci Basile

Иван

Poste le Wednesday 5 November 2008 01:40:55
Répondre     Citer    

Veuillez vous authentifier auparavant pour commenter.

 

Ce forum !
modifier le format de dates avec sed
Pour poser vos questions sur les scripts shell, le Perl, le C, etc... Attention : nous ne sommes pas des spécialistes du dev, ce forum est juste pour de petites aides ponctuelles concernant le développement et les outils de développement.

Sauf mention contraire, les documentations publiées sont sous licence Creative-Commons