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 pour le format de la date


Sujet :

Shell et commandes GNU

  1. #1
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 34
    Par défaut awk pour le format de la date
    Bonjour,

    J'ai besoin de votre aide.

    j'ai un fichier qui contient des dates sous cette format 20120101.

    Je veux séparer les dates sous le format 2012:01:01.

    Comment pourrais je utiliser awk pour faire cela (et ne modifier que les dates).

    Merci pour votre aide

  2. #2
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Par défaut
    Bonjour.

    Ceci pourrait t'aider :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "20120101" | awk 'BEGIN {OFS=":"} {print substr($1,5,2), substr($1,7,2), substr($1,1,4)}'
    Après tu peux récupérer toutes tes dates à l'aide d'un egrep et faire des remplacements sur le fichiers de ces date avec sed, en passant par la commande précédente pour faire le changement de format.

    Cordialement,
    Idriss

  3. #3
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Salut,
    Citation Envoyé par ok.Idriss Voir le message
    Après tu peux récupérer toutes tes dates à l'aide d'un egrep et faire des remplacements sur le fichiers de ces date avec sed, en passant par la commande précédente pour faire le changement de format.
    3 outils (grep, sed et awk) pour un seul traitement, ça fait un peu beaucoup, non ?
    Autant le faire qu'avec un seul en prenant en compte que les chiffres, au nombre de 8 seulement et en répétant le changement autant de fois que nécessaire sur la même ligne (comme on n'en sait pas plus, autant imaginer plusieurs possibilités).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ sed -r 's/\b([0-9]{4})([0-9]{2})([0-9]{2})\b/\1:\2:\3/g' <<<"12345678 123456 123456789 1234 20120101"
    1234:56:78 123456 123456789 1234 2012:01:01
    Pour l'appliquer sur des fichiers, rajouter l'option "-i" de sed, pour que le changement soit effectif dans le fichier original. Éventuellement rajouter une extension '-i.bak' pour une sauvegarde.

  4. #4
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Par défaut
    Salut.

    C'est parce qu'il voulais le faire avec awk

    Non sérieusement, j'ai l'habitude d'utiliser dans mes scripts (c'est aussi une sorte de norme/habitude qu'on applique aussi à mon travail) :
    - grep/egrep pour les recherches
    - awk/cut pour les découpages et transformations
    - sed pour les remplacements et suppressions

    Et souvent je combine donc les 3, après c'est certes pas toujours le plus simple et le plus optimisé et ici (ou comme d'habitude ) ta solution est bien meilleur

    Idriss

  5. #5
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Re-

    Citation Envoyé par ok.Idriss Voir le message
    C'est parce qu'il voulais le faire avec awk
    C'est aussi pour ça que je n'ai pas répondu hier, j'attendais voir si une solution adéquate allait être donnée avec awk, vu que ce n'est pas mon domaine de prédilection à l'instar de sed avec lequel je suis plus à l'aise.

    Comme dit plus haut, du fait que nous n'ayons pas toutes les données du problème, je suis parti sur une solution globale (plusieurs substitutions sur une même ligne), awk ne prenant en compte que les champs fournis il me semble, mais je peux me tromper (corrigez-moi le cas échéant...).

    De plus il fallait cibler que les motifs numériques en prenant en compte qu'un motif de 8 caractères numériques exactement et non une séquence de 8, d'où la présence des "\b" ( correspond à une chaîne vide à l'extrémité d'un mot. Limite entre un mot et un caractère autre qu'un mot),

    Non sérieusement, j'ai l'habitude d'utiliser dans mes scripts (c'est aussi une sorte de norme/habitude qu'on applique aussi à mon travail) :
    - grep/egrep pour les recherches
    - awk/cut pour les découpages et transformations
    - sed pour les remplacements et suppressions
    Tu vas te faire tirer les oreilles par N_BaH (que je félicite au passage pour la promotion ) et Cie

    Et souvent je combine donc les 3, après c'est certes pas toujours le plus simple et le plus optimisé et ici (ou comme d'habitude ) ta solution est bien meilleur
    Bien meilleure non, mais comme je l'ai dit auparavant, c'est juste que je suis plus à l'aise avec sed

  6. #6
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Par défaut
    Citation Envoyé par zipe31 Voir le message
    Tu vas te faire tirer les oreilles par N_BaH
    Boarf, ça ne sera pas la première fois

  7. #7
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 34
    Par défaut
    Voici le format des lignes de mes fichiers.

    000002|538739|139050|.00124514|482675|1.11615|294.996|264.297|1|59|59|0|0|1|0|0|0|0|0|0

    J'ai un répertoire avec plusieurs fichiers qui contiennent ses lignes=> je veux parcourir tous ses fichiers et modifier toutes les lignes essentiellement le premier paramètre (000002 => pour être comme suit 00:00:02).


    Merci pour votre aide.

  8. #8
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -r 's/(..)(..)/\1:\2:/'
    Je te laisse adapter avec les explications données plus haut.

    -i pour un changement dit "en-place"
    -i.bak idem mais avec une sauvegarde (renommage en fichier.bak)
    -s pour un traitement de plusieurs fichiers.

  9. #9
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Par défaut
    Bonjour.

    Aux dires de zipe31, j'ajoute qu'avec les indications qui t'ont été fournie et un petit tour sur les man pages ... tu devrais t'en sortir

    Pour le parcours de fichiers et de répertoires : tu trouvera plusieurs exemples dans la liste d'exercices ou encore dans les forums.

    Tu as tout ce qu'il te faut pour réaliser ce script

    Cordialement,
    Idriss

Discussions similaires

  1. Réponses: 14
    Dernier message: 27/05/2008, 17h29
  2. Réponses: 7
    Dernier message: 11/09/2006, 18h45
  3. [VB6]Aide pour mettre format date avec inputbox
    Par Geliwy77 dans le forum VB 6 et antérieur
    Réponses: 13
    Dernier message: 28/01/2006, 20h13
  4. Version Francaise de MSDE pour le format de date
    Par Drahu dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 25/11/2004, 18h06

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