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 :

Awk : test format date


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Inscrit en
    Février 2008
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 107
    Par défaut Awk : test format date
    Bonjour,

    J'avais ouvert une discussion sur une methode pour substituer une chaine de caractère sur tout un fichier.

    le point a été résolu :

    http://www.developpez.net/forums/d10...r/#post6095019

    Or je dois faire une modification à ce script car il se trouve que la donnée qui a été substituée, l'a été par une date format "YYYYMM". Or dans le fichier cette date est sous forme "YYYYMMDD".

    Le problème rencontré est sur la validité de la date lorsque le Jour = 31 et que le mois demandé ne fait que 28, 29 ou 30 jours.

    En somme si MM in ('01','03','05','08','10','12') ==> RAS
    si MM in ('04','06','09','11') substituer 31 par 30
    si MM = '02' alors substituer 29, 30 ou 31 par 28

    Comme puis-ja faire cela ?

    La commande awk existante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nawk -v IDMOIS=${idmois} '{if (/30076.*2019/ || /10468.*224[0567]/) {print substr($0,1,4) IDMOIS substr($0,11)} }' $ficold > $fic
    Merci.

  2. #2
    Membre éclairé Avatar de aysheaia
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 19
    Par défaut
    Si le mois sur lequel se baser est dans la variable IDMOIS, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    nawk -v IDMOIS=${idmois} 'BEGIN { a["01"]=a["03"]=a["05"]=a["07"]=a["08"]=a["10"]=a["12"]=31; a["04"]=a["06"]=a["09"]=a["11"]=30; a["02"]=28; } { if (/30076.*2019/ || /10468.*224[0567]/) { jour=substr($0,11, 2); print substr($0,1,4) IDMOIS (jour < a[IDMOIS] ? jour : a[IDMOIS]) substr($0,13)} }' $ficold > $fic

  3. #3
    Membre actif
    Inscrit en
    Février 2008
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 107
    Par défaut
    Bonjour et merci bien pour cette aide.

    Seulement maintenant, il m'a supprimé le jour de l'ensemble des lignes.

    La sélection de lignes est toujours correcte, mais si nous avions 55 colonnes initialement, nous nous retrouvons avec 53 colonnes en résultat.

    Où se trouve l'erreur ?
    Merci.

  4. #4
    Membre actif
    Inscrit en
    Février 2008
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 107
    Par défaut
    Et bien c'est fait !

    IDMOIS = ANNEE+MOIS (AAAAMM)
    Donc il me fallait pour utiliser ton tableau, initialiser une variable MOIS

    MOIS = MM

    donc la ligne devient :

    avec MOIS=`echo $idmois | cut -c5,6`

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nawk -v IDMOIS=${idmois} -v MOIS=${mois} 'BEGIN { a["01"]=a["03"]=a["05"]=a["07"]=a["08"]=a["10"]=a["12"]=31; a["04"]=a["06"]=a["09"]=a["11"]=30; a["02"]=28; } { if (/30076.*2019/ || /10468.*224[0567]/) { jour=substr($0,11, 2); print substr($0,1,4) IDMOIS (jour < a[MOIS] ? jour : a[MOIS]) substr($0,13)} }' $ficold > $fic
    Encore merci.

    Bonne journée et bon WE.

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

Discussions similaires

  1. Format date : y'a forcément plus simple...
    Par ZERS dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 02/12/2004, 15h28
  2. Transformation en format Date
    Par Jean-Matt dans le forum Langage SQL
    Réponses: 6
    Dernier message: 16/11/2004, 16h20
  3. Tester un format date
    Par Tapioca dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 30/06/2004, 10h18
  4. interfaces Access et format Date
    Par say dans le forum InterBase
    Réponses: 21
    Dernier message: 10/05/2004, 17h24
  5. Format date
    Par cochet dans le forum Bases de données
    Réponses: 4
    Dernier message: 02/03/2004, 08h37

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