Conversion date aaaammjj en jj/mm/aaaa

Résolu
Bu1979 -  
lami20j Messages postés 21506 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
Configuration: Windows XP
Internet Explorer 6.0

11 réponses

  1. Bu1979
     
    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
  2. Bu1979
     
    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.
    0
  3. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    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$
    
    0
  4. Bu1979
     
    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...
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Bu1979
     
    Dsl j'aurai du preciser la syntaxe exacte.

    Merci bcp Lami et les autres, cela fontionne tres bien.
    0
  7. Chacual Messages postés 230 Statut Membre 150
     
    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 ?
    -1
  8. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    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]$
    ;-))
    -1
  9. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    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;
    

    -1
  10. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    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
    ;-))
    -1
  11. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    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;
    
    -1
  12. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    De rien ;-)
    -1