Conversion date aaaammjj en jj/mm/aaaa

[Résolu/Fermé]
Signaler
-
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
-
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

11 réponses

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
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 41713 internautes nous ont dit merci ce mois-ci

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.
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 562
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$
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...
Dsl j'aurai du preciser la syntaxe exacte.

Merci bcp Lami et les autres, cela fontionne tres bien.
Messages postés
230
Date d'inscription
jeudi 28 juin 2007
Statut
Membre
Dernière intervention
15 octobre 2007
148
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 ?
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 887
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]$
;-))
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 562
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;

Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 887
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
;-))
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 562
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;
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 562
De rien ;-)