IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Identifier une date et changer son format


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Bioingénieur
    Inscrit en
    Mars 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Bioingénieur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mars 2012
    Messages : 9
    Par défaut Identifier une date et changer son format
    Bonjour,

    J'aimerais modifier le format des dates d'un fichier dans un script.
    Voici à quoi ressemble mon fichier d'entrée:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    anim1;herd1;breed1;20/02/2012;22/05/2011;126
    anim1;herd1;breed1;18/03/2012;22/05/2011;158
    anim2;herd1;breed1;14/11/2012;06/09/2012;61
    anim2;herd1;breed1;20/12/2012;06/09/2012;97
    ...
    et voici à quoi je voudrais que mon fichier de sortie ressemble:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    anim1;herd1;breed1;2012-02-20;2011-05-22;126
    anim1;herd1;breed1;2012-03-18;2011-05-22;158
    anim2;herd1;breed1;2012-11-14;2012-09-06;61
    anim2;herd1;breed1;2012-12-20;2012-09-06;97
    ...
    J'imaginais qu'il fallait d'abord que je lise les colonnes $4 et $5 en indiquant qu'il s'agit de date ayant le format "+%d/%m/%Y"
    et ensuite lui demander de réécrire ces mêmes colonnes avec le format date "+%F" ou "+%Y-%m-%d"

    mais en fait je n'ai aucune idée de comment faire cela et je ne sais même pas si c'est possible ??

    Merci de votre aide ...

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 662
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 662
    Par défaut
    Bonjour,

    d'abord, lire Comment lire/parcourir un ficher en shell,
    ensuite, quand tu as récupéré les dates, il faut les "éclater" en se basant sur leur séparateur (car date ne reconnaît pas ce type de date), et les reconstituer comme tu le souhaites.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre averti
    Profil pro
    Bioingénieur
    Inscrit en
    Mars 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Bioingénieur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mars 2012
    Messages : 9
    Par défaut
    Bon c'est un peu du bidouillage mais voilà comment j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk -F';' '{print $4}' InFileName | awk -F'/' '{print $3,$2,$1}' | sed -i 's/ /-/g' > Out1
    je fais la même chose pour $5, j'ai donc 2 fichiers : Out1 et OUt2
    et je peux insérer ces deux sous-fichiers pour recréer le fichier que je veux ....

    c'est un peu brouillon comme manière de faire ... je pensais qu'il y avait moyen de travailler avec les formats de date ....

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut
    Citation Envoyé par pantouflebdv Voir le message
    Voici à quoi ressemble mon fichier d'entrée:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    anim1;herd1;breed1;20/02/2012;22/05/2011;126
    anim1;herd1;breed1;18/03/2012;22/05/2011;158
    anim2;herd1;breed1;14/11/2012;06/09/2012;61
    anim2;herd1;breed1;20/12/2012;06/09/2012;97
    ...
    et voici à quoi je voudrais que mon fichier de sortie ressemble:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    anim1;herd1;breed1;2012-02-20;2011-05-22;126
    anim1;herd1;breed1;2012-03-18;2011-05-22;158
    anim2;herd1;breed1;2012-11-14;2012-09-06;61
    anim2;herd1;breed1;2012-12-20;2012-09-06;97
    ...
    Un simple sed devrait suffire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ echo 'anim1;herd1;breed1;20/02/2012;22/05/2011;126' | sed -e 's|;\([0-3][0-9]\)/\([01][0-9]\)/\([12][0-9][0-9][0-9]\)|;\3-\2-\1|g'
    anim1;herd1;breed1;2012-02-20;2011-05-22;126
    Bugs connus:
    - ne remplace rien si la date est dans la première colonne
    - donne de mauvais résultats s'il y a des trucs trop gros comme ";20/02/20129"
    - ne convertit pas les dates sans zéro (comme ";1/1/1970")
    - ne convertit pas les dates farfelues (comme ";42/25/3014")

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 838
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 838
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par jack-ft Voir le message
    - ne convertit pas les dates sans zéro (comme ";1/1/1970")
    Bonjour

    On peut arranger ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -e "s/\([0-9]\{1,2\}\)\/\([0-9]\{1,2\}\)\/\([0-9]\{2,4\}\)/\3-\2-\1/g" fichier
    Citation Envoyé par jack-ft Voir le message
    - ne convertit pas les dates farfelues (comme ";42/25/3014")
    Ma commande convertit ce genre de date (en fait elle inverse tout groupe de 1 ou 2/1 ou 2/2 ou 4 chiffres). Est-ce une bonne ou une mauvaise chose...? Personnellement, partisan de l'outil minimaliste (chaque outil ne fait qu'une chose mais le fait bien) j'aurais tendance à penser que le but de cette commande n'étant pas de checker la validité d'une date mais juste de permuter les chiffres, ça reste une bonne chose (à chacun son job quoi)...

    Citation Envoyé par pantouflebdv Voir le message
    je pensais qu'il y avait moyen de travailler avec les formats de date ....
    C'est possible. Faut d'abord extraire la date, puis l'envoyer à la commande "date" qui pourra alors la checker et te la retourner au format attendu puis réinsérer ce retour dans ton fichier. Tout dépend en fait de ton besoin. Est-ce juste inverser les chiffres ou faire un peu plus...?
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 352
    Par défaut
    Bonjour,
    En awk:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $ cat conv.txt
    anim1;herd1;breed1;20/02/2012;22/05/2011;126
    anim1;herd1;breed1;18/03/2012;22/05/2011;158
    anim2;herd1;breed1;14/11/2012;06/09/2012;61
    anim2;herd1;breed1;20/12/2012;06/09/2012;97
    $ awk -F'[;/]' '{print $1";"$2";"$3";"$6"-"$5"-"$4";"$9"-"$8"-"$7";"$10}' conv.txt
    anim1;herd1;breed1;2012-02-20;2011-05-22;126
    anim1;herd1;breed1;2012-03-18;2011-05-22;158
    anim2;herd1;breed1;2012-11-14;2012-09-06;61
    anim2;herd1;breed1;2012-12-20;2012-09-06;97

  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 838
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 838
    Billets dans le blog
    1
    Par défaut
    Hum, tu présumes que la date se trouve uniquement dans les champs 4 et 5 ce qui limite vachement non ?
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  8. #8
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 662
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 662
    Par défaut
    un fichier csv se doit d'avoir une certaine cohérence, quand même.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Calendrier] convertir une date en format date de mysql
    Par khadi8 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 13/12/2012, 20h58
  2. Récupérer une date à partir d'un format UNIX
    Par Spack dans le forum Programmation et administration système
    Réponses: 8
    Dernier message: 09/02/2009, 14h46
  3. Réponses: 2
    Dernier message: 10/03/2007, 09h14
  4. Réponses: 6
    Dernier message: 25/09/2006, 14h51
  5. Réponses: 14
    Dernier message: 29/06/2005, 10h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo