Conversion date aaaammjj en jj/mm/aaaa

Résolu
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. 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 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.
      1. Modérateur
        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$
        
        1. 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...
          1. Dsl j'aurai du preciser la syntaxe exacte.

            Merci bcp Lami et les autres, cela fontionne tres bien.
            1. 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. Modérateur
                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. Modérateur
                  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. Modérateur
                    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. Modérateur
                      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;