rss
Rechercher : dans
Par : Pertinence Date Nom d'utilisateur
Statut : Résolu

Conversion date aaaammjj en jj/mm/aaaa

Posté par Bu1979, le lundi 1 octobre 2007 à 17:36:52
Bonjour,

J'aimerai connaitre les commandes en Shell Script (ksh)
pour passer d'un format comme celui-ci:
aaaammjj
A celui ci:
jj/mm/aaaa

Cependant j'ai un souci supplemetaire, c'est que mon fichier d'Input contient ce format "aaaammjj", et mon fichier d'output doit contenir celui la "jj/mm/aaaa", c'est a dire que ce n'est pas qu'une valeur a tranformer mais bien plusieurs.

Exemple:

233256.00;25663325.00;PKR;20070920;
5153743.43;4831391.53;HKD;20070921;
5153743.43;4831391.53;HUF;20070922;

a transformer en:
233256.00;25663325.00;PKR;20/09/2007;
5153743.43;4831391.53;HKD;21/09/2007;
5153743.43;4831391.53;HUF;22/09/2007;

Merci pour votre aide
Configuration: Windows XP
Internet Explorer 6.0
Répondre à Bu1979  Signaler ce message aux modérateurs Aller au dernier message

1


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Chacual, le lundi 1 octobre 2007 à 17:51:04
Est-ce que cette commande :

awk -F ';' '{yyyy=`cut -c 1-4 $4`; mm=`cut -c 5-6 $4`; dd=`cut -c 7-8 $4`; print dd "/" mm "/" yyyy}' /fichier/input

t'affiche les dates au format voulu ?
Répondre à Chacual

2


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Bu1979, le lundi 1 octobre 2007 à 18:22:14
La commande a l'air correcte, mais quand tu mets /fichier/input, c'est le fichier dans lequel il va lire les renseignements ou il va les ecrire?

Car je pensais rajouter:
cat "Fichier_Input" | awk -F ';' '{yyyy=`cut -c 1-4 $4`; mm=`cut -c 5-6 $4`; dd=`cut -c 7-8 $4`; print dd "/" mm "/" yyyy}' > fichier_output

mais ca ne marche pas.. erreur de syntaxe apparemment
Répondre à Bu1979

3


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
jipicy, le lundi 1 octobre 2007 à 18:24:12
Salut,

Avant toute chose fais une copie de sauvegarde de ton fichier. :
while read line
do DATE=$(awk -F";" '{ print $4 }' <<<$line)
NEWDATE=$(date -d "$DATE" '+%d/%m/%Y')
sed -i "s#$DATE#$NEWDATE#" ton_fichier ; done < ton_fichier
Ce qui donne :
[tmpfs]$ cat plop

233256.00;25663325.00;PKR;20070920;
5153743.43;4831391.53;HKD;20070921;
5153743.43;4831391.53;HUF;20070922;

[tmpfs]$ while read line; do DATE=$(awk -F";" '{ print $4 }' <<<$line); NEWDATE=$(date -d "$DATE" '+%d/%m/%Y'); sed -i "s#$DATE#$NEWDATE#" plop ; done < plop

[tmpfs]$ cat plop

233256.00;25663325.00;PKR;20/09/2007;
5153743.43;4831391.53;HKD;21/09/2007;
5153743.43;4831391.53;HUF;22/09/2007;

[tmpfs]$
;-))
Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.
Répondre à jipicy

4


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
lami20j, le lundi 1 octobre 2007 à 18:51:57
Salut,
~/trash$ cat fichier
233256.00;25663325.00;PKR;20070920;
5153743.43;4831391.53;HKD;20070921;
5153743.43;4831391.53;HUF;20070922;
~/trash$ sed -i.orig 's/\(.*\)\([0-9]\{4\}\)\([0-9]\{2\}\)\([0-9]\{2\}\);$/\1\4\/­\3\/\2/' fichier
~/trash$ cat fichier
233256.00;25663325.00;PKR;20/09/2007
5153743.43;4831391.53;HKD;21/09/2007
5153743.43;4831391.53;HUF;22/09/2007
~/trash$ cat fichier.orig
233256.00;25663325.00;PKR;20070920;
5153743.43;4831391.53;HKD;20070921;
5153743.43;4831391.53;HUF;20070922;
ou
233256.00;25663325.00;PKR;20070920;
5153743.43;4831391.53;HKD;20070921;
5153743.43;4831391.53;HUF;20070922;
~/trash$ sed -i.orig -r 's/(.*)([0-9]{4})([0-9]{2})([0-9]{2});$/\1\4\/\3\/\2/' fichier
~/trash$ cat fichier
233256.00;25663325.00;PKR;20/09/2007
5153743.43;4831391.53;HKD;21/09/2007
5153743.43;4831391.53;HUF;22/09/2007
~/trash$ cat fichier.orig
233256.00;25663325.00;PKR;20070920;
5153743.43;4831391.53;HKD;20070921;
5153743.43;4831391.53;HUF;20070922;

lami20j
Répondre à lami20j

5


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Bu1979, le lundi 1 octobre 2007 à 18:52:34
Merci a vous deux, cependant il faut aussi que je vous precise que je travaille sur Solaris SUN, en ksh, et que je pense qu'il y a un souci de syntaxe avec les commandes sed, et date.
J'ai une erreur sur les options, car -d n'existe pas et -i non plus.
Répondre à Bu1979

6


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
lami20j, le lundi 1 octobre 2007 à 19:06:43
essaie
$ cat fichier
233256.00;25663325.00;PKR;20070920;
5153743.43;4831391.53;HKD;20070921;
5153743.43;4831391.53;HUF;20070922;
$ sed 's/\(.*\)\([0-9]\{4\}\)\([0-9]\{2\}\)\([0-9]\{2\}\);$/\1\4\/­\3\/\2/' fichier>resultat
$ cat resultat
233256.00;25663325.00;PKR;20/09/2007
5153743.43;4831391.53;HKD;21/09/2007
5153743.43;4831391.53;HUF;22/09/2007
lami20j@debian:~/trash$
lami20j
Répondre à lami20j

7


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
jipicy, le lundi 1 octobre 2007 à 19:07:10
Re-

Prends la commande de lami20j et passe par un fichier temporaire alors :
sed 's/\(.*\)\([0-9]\{4\}\)\([0-9]\{2\}\)\([0-9]\{2\}\);$/\1\4\/­\3\/\2;/' < fichier_entrée > fichier_sortie
mv fichier_sortie fichier_entrée
;-))
Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.
Répondre à jipicy

8


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Bu1979, le lundi 1 octobre 2007 à 19:13:10
Super Lami ca fonctionne presque, a une exception pres:

Dans ce cas:

4569871357.64;9936483272.20;GBP;20070921;F

Lorsque l'on a une donnee supplementaire derriere la date, cela ne la convertie pas...
Répondre à Bu1979

9


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
lami20j, le lundi 1 octobre 2007 à 19:19:13
Lorsque l'on a une donnee supplementaire derriere la date, cela ne la convertie pas...
et si on a deux, trois, quatre, etc...

il faut préciser la structure de ton fichier pour donner une solution exacte
si la date se trouve toujours dans le 4 champs(le séparateur ;) alors fait comme ça
$ cat fichier
233256.00;25663325.00;PKR;20070920;FFF
5153743.43;4831391.53;HKD;20070921;
5153743.43;4831391.53;HUF;20070922;
$ sed 's/\(.*;.*;.*;\)\([0-9]\{4\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)/\­1\4\/\3\/\2/' fichier>resultat
$ cat resultat
233256.00;25663325.00;PKR;20/09/2007;FFF
5153743.43;4831391.53;HKD;21/09/2007;
5153743.43;4831391.53;HUF;22/09/2007;
lami20j
Répondre à lami20j

10


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Bu1979, le lundi 1 octobre 2007 à 19:24:35
Dsl j'aurai du preciser la syntaxe exacte.

Merci bcp Lami et les autres, cela fontionne tres bien.
Répondre à Bu1979

11


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
 lami20j, le lundi 1 octobre 2007 à 20:13:08
De rien ;-) lami20j
Répondre à lami20j
Logiciels pertinents trouvés dans les téléchargements
Télécharger MTV Video Converter 1.11.4MTV Video Converter - Le programme MTV Video Converter est un convertisseur vidéo vers le format MTV acceptant les formats d'entrée suivants : ...Catégorie: Conversion
Licence: Freeware/gratuit
Télécharger Mobile 3GP Converter 1.0Mobile 3GP Converter - Le programme "Mobile 3GP Converter" permet de convertir des fichiers au format 3GP (extension *.3gp ou *.3g2) vers un...Catégorie: Edition vidéo
Licence: Freeware/gratuit
Télécharger Mmm Free 2.02Mmm Free - Vous avez remarqué ? Plus vous installez de logiciels, plus le menu contextuel "clic-droit" devient encombré. Mmm Free...Catégorie: Optimisation
Licence: Freeware/gratuit
Télécharger AMV Convert Tool 3.68AMV Convert Tool - Le package MP3 Player Utilities contient notamment un lecteur permettant de lire les fichiers au format AMV ainsi qu'un...Catégorie: Edition vidéo
Licence: Freeware/gratuit
Plus de logiciels gratuits sur « Conversion date aaaammjj en jj/mm/aaaa »