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

Linux Discussion :

Awk et formatage de la date


Sujet :

Linux

  1. #1
    Membre habitué
    Homme Profil pro
    Chef de projets
    Inscrit en
    Août 2008
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2008
    Messages : 127
    Points : 195
    Points
    195
    Par défaut Awk et formatage de la date
    Bonjour,

    J'ai un fichier qui ressemble à ceci :

    2008/12/09 13 10 jr275862
    2008/12/19 13 10 jr275862
    2008/12/29 13 10 jr275862
    2008/12/25 13 10 jr275862
    2008/12/31 13 10 jr275862
    2008/12/10 13 10 jr275862
    2008/12/18 13 10 jr275862
    2008/12/17 13 10 jr275862
    2008/12/16 13 10 jr275862
    2008/12/15 13 10 jr275862
    2008/12/14 13 10 jr275862


    Je veux extraire la 1ere colonne et la transformer en jour 'lundi, mardi, ....' C'est pas grave si les jours sont en anglais.
    J'ai essayé quelques trucs avec awk..... mais je n'arrive pas à formater ma date.

    Avez-vous une idée ?

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 33
    Points : 37
    Points
    37
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    is@3epc:~$ cal $( cat test | awk '{print $1}' | sed "s/\// /g" | awk '{print $2 " "$1}' ) 
       December 2008    
    Su Mo Tu We Th Fr Sa
        1  2  3  4  5  6
     7  8  9 10 11 12 13
    14 15 16 17 18 19 20
    21 22 23 24 25 26 27
    28 29 30 31         
     
    is@3epc:~$
    en ajoutant un grep pour chopper la ligne et une selection par colone pour selectionner la journée .....

    il reste plus qu'a faire un case par colonne sur ce resultat
    1) su
    2) Mo
    3)
    ....
    et donc déduire le jour....


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    is@3epc:~$ cat test
    2008/12/09 13 10 jr275862 
    is@3epc:~$ toto=$(cat test|cut -d" " -f1|cut -d"/" -f3|sed "/^0/ s/0//")
    is@3epc:~$ ligne=`cal $( cat test | awk '{print $1}' | sed "s/\// /g" | awk '{print $2 " "$1}' ) | grep " $toto " ` 
    is@3epc:~$ colone=$(for i in 1 2 3 4 5 6 7 ; do echo $ligne | cut -d" " -f$i ; done | grep -n $toto | cut -d":" -f1)
    is@3epc:~$ case $colone in
    > 1) #dimanche
    > echo dimanche
    > ;;
    > 2) 
    > echo lundi
    > ;;
    > 3)
    > echo mardi
    > ;;
    > 4)
    > echo mercredi
    > ;;
    > 5)
    > echo jeudi
    > ;;
    > 6)
    > echo vendredi
    > ;;
    > 7) echo samedi
    > ;;
    > esac
    mardi
    is@3epc:~$
    j'obtiens bien mardi pour le 9 decembre 2008

    maintenant l'explication :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    	#selectionner que le numero de jour dans la date
    	N_JOUR_DU_MOI=$(cat test|cut -d" " -f1|cut -d"/" -f3|sed "/^0/ s/0//")
    le sed élimine juste les 01 02 03 04 etc.... en 1 2 3 4
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    	#charger la SEMAINE de calendrier correspondante à la date recherchee
    	SEMAINE=`cal $( cat test | awk '{print $1}' | sed "s/\// /g" | awk '{print $2 " "$1}' ) | grep " $N_JOUR_DU_MOI " `
    genere une semaine entiere au format 7 8 9 10 11 12 13
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    	#calculer la position en JOUR_DANS_SEMAINE du jour qu on cherche
    	JOUR_DANS_SEMAINE=$(for i in 1 2 3 4 5 6 7 ; do echo $SEMAINE | cut -d" " -f$i ; done | grep -n $N_JOUR_DU_MOI | cut -d":" -f1)
    renverse la semaine sous la forme
    7
    8
    9
    10
    11
    12
    13
    puis selectionne le n° de la ligne contenant le n° du jour (ici 3) pour le 9 ieme jour du moi considéré



    le reste n'est qu'affichage du resultat


    bon faut optimiser et rendre le ccode plus propre mais c'est la façon simple de faire avec que des commandes hyper basiques et pas de sed ou awk complexes qui ferai tout d'un seul coup mais peu lisible ou comprehensible par le Mr Tout le Monde

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 33
    Points : 37
    Points
    37
    Par défaut
    histoire de faire l'andouille on peut jouer un peu et résumer ça à quelque chose de peu lisible :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    is@3epc:~$ cat test | while read LIGNE ; do for i in `cal $(echo $LIGNE  | awk -F "/" '{print $2" "$1}') | grep $(echo $LIGNE | sed "s/.*\///;s/\ .*//;/^0/ s/0//") | head -1` ; do echo $i ; done | grep -n $(echo $LIGNE|sed "s/.*\///;s/\ .*//;/^0/ s/0//" ) | cut -d":" -f1 ; done | sed "s/1/dimanche/;s/2/lundi/;s/3/mardi/;s/4/mercredi/;s/5/jeudi/;s/6/vendredi/;s/7/samedi/"
    mardi
    vendredi
    lundi
    jeudi
    mercredi
    mercredi
    jeudi
    mercredi
    mardi
    lundi
    dimanche
    is@3epc:~$
    bon c'est stupide mais marrant....

  4. #4
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while read date stuff; do echo `date +%A -d $date` $stuff; done < ton_fichier

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 34
    Points : 41
    Points
    41
    Par défaut
    Bonjour

    Avec la version GNU (gawk) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk '{gsub("/"," ",$1); $1=strftime("%A",mktime($1 " 0 0 0")); print}'

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 33
    Points : 37
    Points
    37
    Par défaut
    ils sont trop serieux ... et pas joueurs...

Discussions similaires

  1. Formatage inopiné des dates en CVS
    Par Monky dans le forum CVS
    Réponses: 0
    Dernier message: 22/06/2009, 21h21
  2. Formatage d'une date a l'aide d'expression réguliere
    Par sunshine2004 dans le forum ASP.NET
    Réponses: 3
    Dernier message: 10/04/2008, 22h45
  3. Formatage d'une date de MySQL
    Par Mister Nono dans le forum Requêtes
    Réponses: 3
    Dernier message: 17/07/2006, 08h24
  4. Formatage de la date dans les fichiers logs
    Par yann_p dans le forum Administration système
    Réponses: 2
    Dernier message: 04/07/2006, 10h52
  5. [Dates] formatage d'une date
    Par illegalsene dans le forum Langage
    Réponses: 4
    Dernier message: 02/02/2006, 18h10

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