|
|
|
|
||||||
| fr.comp.os.unix Système UNIX. |
![]() |
|
|
LinkBack | Outils de la discussion |
|
|
#1 (permalink) |
|
Messages: n/a
Hébergeur: |
Bonjour.
J'ai un besoin urgent de faire un traitement sur un fichier texte, et comme je ne suis pas très versé dans l'art du shell, je me tourne vers vous tous ![]() J'ai un relativement gros fichier texte (environ 40000 longues lignes), donc, dans lequel on trouve des dates au format jj/mm/aaaa, que je souhaiterais remplacer par les mêmes dates au format aaaa-mm-jj. Ces dates ne sont pas disposées dans les mêmes colonnes, et ne sont pas forcement en nombre identique en fonction des lignes. Quelqu'un pourrait-il me dire comment faire ça autrement qu'à la main ? |
|
|
|
#2 (permalink) |
|
Messages: n/a
Hébergeur: |
Le Wed, 19 Apr 2006 17:49:08 +0200, Laurent écrivit:
> J'ai un relativement gros fichier texte (environ 40000 longues lignes), > donc, dans lequel on trouve des dates au format jj/mm/aaaa, que je > souhaiterais remplacer par les mêmes dates au format aaaa-mm-jj. > Ces dates ne sont pas disposées dans les mêmes colonnes, et ne sont pas > forcement en nombre identique en fonction des lignes. > Quelqu'un pourrait-il me dire comment faire ça autrement qu'à la main ? Avec une regexp sous vim, ça devrait pouvoir marcher, si tu es sûr de ton format: :%s#\(\d\d\)\/\(\d\d\)\/\(\d\d\d\d\)#\3-\2-\1#g Arnaud. -- Perso: http://launay.org/blog/ Hébergement: http://www.nocworld.com/ |
|
|
|
#3 (permalink) |
|
Messages: n/a
Hébergeur: |
Laurent :
> Bonjour. > > J'ai un besoin urgent de faire un traitement sur un fichier texte, et > comme je ne suis pas très versé dans l'art du shell, je me tourne vers > vous tous ![]() > > J'ai un relativement gros fichier texte (environ 40000 longues lignes), > donc, dans lequel on trouve des dates au format jj/mm/aaaa, que je > souhaiterais remplacer par les mêmes dates au format aaaa-mm-jj. sed 's|\([0-9][0-9]\)/\([0-9][0-9]\)/\([0-9][0-9][0-9][0-9]\)|\3-\2-\1|g' < source > resultat Attention à l'erreur classique: il ne faut pas mettre pour «resultat» le même nom de fichier que «source», sinon tu écrases «source» avant que sed ait commencé à le lire. |
|
|
|
#4 (permalink) |
|
Messages: n/a
Hébergeur: |
On Wed, 19 Apr 2006 17:49:08 +0200, Laurent wrote:
[...] > J'ai un relativement gros fichier texte (environ 40000 longues lignes), > donc, dans lequel on trouve des dates au format jj/mm/aaaa, que je > souhaiterais remplacer par les mêmes dates au format aaaa-mm-jj. > Ces dates ne sont pas disposées dans les mêmes colonnes, et ne sont pas > forcement en nombre identique en fonction des lignes. > > Quelqu'un pourrait-il me dire comment faire ça autrement qu'à la main ? perl -pi -e 's#(\d\d)/(\d\d)/(\d{4})#$3-$3-$1#g' fichier -- Stephane |
|
|
|
#5 (permalink) |
|
Messages: n/a
Hébergeur: |
Le 19-04-2006, Stephane Chazelas <stephane_chazelas@yahoo.fr> a écrit:
> On Wed, 19 Apr 2006 17:49:08 +0200, Laurent wrote: > [...] >> J'ai un relativement gros fichier texte (environ 40000 longues lignes), >> donc, dans lequel on trouve des dates au format jj/mm/aaaa, que je >> souhaiterais remplacer par les mêmes dates au format aaaa-mm-jj. >> Ces dates ne sont pas disposées dans les mêmes colonnes, et ne sont pas >> forcement en nombre identique en fonction des lignes. >> >> Quelqu'un pourrait-il me dire comment faire ça autrement qu'à la main ? > > perl -pi -e 's#(\d\d)/(\d\d)/(\d{4})#$3-$3-$1#g' fichier perl -pi -e 's#(\d\d)/(\d\d)/(\d{4})#$3-$2-$1#g' fichier plutôt, non ? ![]() Croco |
|
|
|
#6 (permalink) |
|
Messages: n/a
Hébergeur: |
2006-04-19, 16:13(+00), Arnaud Launay:
> Le Wed, 19 Apr 2006 17:49:08 +0200, Laurent écrivit: >> J'ai un relativement gros fichier texte (environ 40000 longues lignes), >> donc, dans lequel on trouve des dates au format jj/mm/aaaa, que je >> souhaiterais remplacer par les mêmes dates au format aaaa-mm-jj. >> Ces dates ne sont pas disposées dans les mêmes colonnes, et ne sont pas >> forcement en nombre identique en fonction des lignes. >> Quelqu'un pourrait-il me dire comment faire ça autrement qu'à la main ? > > Avec une regexp sous vim, ça devrait pouvoir marcher, si tu es > sûr de ton format: > > :%s#\(\d\d\)\/\(\d\d\)\/\(\d\d\d\d\)#\3-\2-\1#g Avec vim, on peux plus simplement faire: :%s#\v(\d\d)/(\d\d)/(\d{4})#\3-\2-\1#g \v, c'est pour "very magic" ![]() -- Stéphane |
|
|
|
#7 (permalink) |
|
Messages: n/a
Hébergeur: |
Dans le message <news:e2600q$1kpe$1@cantal.sis.pasteur.fr>,
*Croco* tapota sur f.c.o.unix : > Stephane Chazelas a écrit : >> perl -pi -e 's#(\d\d)/(\d\d)/(\d{4})#$3-$3-$1#g' fichier > perl -pi -e 's#(\d\d)/(\d\d)/(\d{4})#$3-$2-$1#g' fichier > plutôt, non ? ![]() Voir : perl -pi~ -e 's#(\d\d)/(\d\d)/(\d{4})#$3-$2-$1#g' fichier On s'assure ainsi de garder une copie de sauvegarde. -- Sébastien Monbrun aka TiChou |
|
|
|
#8 (permalink) |
|
Messages: n/a
Hébergeur: |
Le Thu, 20 Apr 2006 00:06:17 +0100, Stephane Chazelas écrivit:
> > :%s#\(\d\d\)\/\(\d\d\)\/\(\d\d\d\d\)#\3-\2-\1#g > Avec vim, on peux plus simplement faire: > :%s#\v(\d\d)/(\d\d)/(\d{4})#\3-\2-\1#g > \v, c'est pour "very magic" ![]() Connaissais pas. Sympa, comme option. ViM, c'est de la balle ![]() Arnaud. -- Perso: http://launay.org/blog/ Hébergement: http://www.nocworld.com/ |
|
![]() |
| Outils de la discussion | |
|
|