Conversion date aaaammjj en jj/mm/aaaa
Résolu
Bu1979
-
lami20j Messages postés 21331 Date d'inscription Statut Modérateur, Contributeur sécurité Dernière intervention -
lami20j Messages postés 21331 Date d'inscription Statut Modérateur, Contributeur sécurité Dernière intervention -
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
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
A voir également:
- Convertir aaaammjj en jj/mm/aaaa
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Convertir epub en kindle - Guide
- Convertir youtube en mp3 avec audacity - Guide
- Convertir kindle en epub - Guide
- Convertir audio en texte word - Guide
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
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
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.
J'ai une erreur sur les options, car -d n'existe pas et -i non plus.
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...
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...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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 ?
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 ?
Salut,
Avant toute chose fais une copie de sauvegarde de ton fichier. :
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_fichierCe 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]$;-))
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;
Re-
Prends la commande de lami20j et passe par un fichier temporaire alors :
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;-))
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
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;