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 :

[(n)awk] Parsing avec plusieurs séparateurs de champs


Sujet :

Linux

  1. #1
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut [(n)awk] Parsing avec plusieurs séparateurs de champs
    Bonjour,

    J'ai des lignes à parser avec awk (ou nawk peu importe) qui ont la gueule suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    |S|SDP|NDP7|20070308|012109||PPD_Account/3/1/10/2//A/N/5/0//1/75//20070129///0|PPD_Bal/1/1/1/1/660//I/42/A/D/1/0/0/0/0/450/1/0/1/|
    Ces lignes font un peu plus de 1 000 caractères chacune.

    Mon problème est le suivant : je souhaite pouvoir à la fois découper sur les '|' et sur les '/', pour pouvoir récupérer plusieurs informations à la fois.
    Un truc du genre (attention, ca ne fonctionne pas) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk -F"|/" '{ if (($8=="PPD_Account") && ($10=="1")) print $14 }'
    Est-ce que cela est possible de façon relativement simple ?

    Système : solaris 5.8
    version de awk : j'arrive pas à trouver quelle option retourne la version de (n)awk...
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  2. #2
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Par défaut
    Citation Envoyé par gangsoleil
    Système : solaris 5.8
    version de awk : j'arrive pas à trouver quelle option retourne la version de (n)awk...

    euh...

    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
    root@GorgonMobile:~# awk --version
    GNU Awk 3.1.5
    Copyright © 1998, 1991-2005 Free Software Foundation, Inc.
     
    Ce programme est un logiciel libre; vous pouvez le redistribuer ou le
    modifier selon les termes de la License Publique Générale de GNU, publiée
    par la Free Software Foundation; soit la version 2 de la Licence ou,
    soit (selon vos préférences) toute version ultérieure.
     
    Ce logiciel est distribué en espérant qu'il soit utile,
    mais sans AUCUNE garantie; sans la garantie liée à des raisons
    COMMERCIALES ou pour RÉPONDRE À UN BESOIN PARTICULIER.
    selon les termes de la « GNU General Public License ».
    Pour plus d'informations à ce sujet, consulter la « GNU General Public License ».
     
    Vous devriez avoir reçu copie de la Licence Publique Générale de GNU
    avec ce programme; sinon, sinon écrire à la Free Software Foundation, Inc.,
    51 Franklin Street, FIth Floor, Boston, MA 02110-1301, USA.
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

  3. #3
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut
    Citation Envoyé par gorgonite
    euh...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    root@GorgonMobile:~# awk --version
    GNU Awk 3.1.5
    Copyright © 1998, 1991-2005 Free Software Foundation, Inc.
     
    [/cut]

    awk --version ne fonctionne pas sur les machines dont je dispose... (j'avais quand même essayé avant de poster)
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  4. #4
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Par défaut
    Citation Envoyé par gangsoleil
    awk --version ne fonctionne pas sur les machines dont je dispose... (j'avais quand même essayé avant de poster)

    je m'en doute, mais c'était juste pour t'embeter
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

  5. #5
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Tu peux essayer ceci:
    Le fichier titi.awk
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    BEGIN { FS = "[|/]"; }
    {
    print $8,$10,$14;
    }
    que j'applique a l'exemple que tu postes (contenu dans le fichier toto.awk):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    awk -f titi.awk toto.awk
    me donne en sortie:
    Ce n'est peut-etre pas exactement ce que tu veux, mais cela doit etre adaptable.

  6. #6
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut
    Bonjour,

    Tout d'abord, merci beaucoup pour l'exemple que tu me donnes. Malheureusement, lorsque je le copie/colle chez moi, cela ne fonctionn pas...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $> cat titi.awk
    BEGIN { FS = "[|/]"; }
    {
    print $8,$10,$14;
    }
     
    $> awk -f titi.awk  toto
     
    $>
    Une idée géniale pour que ca fonctionne quand même ?
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  7. #7
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut
    Trouvé !!!

    Il fallait que j'utilise nawk, et non pas awk. Mais je ne sais pas pourquoi...

    Merci à tous.
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

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

Discussions similaires

  1. [awk] Extraire des champs avec plusieurs séparateurs différents
    Par leon1983 dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 20/11/2013, 16h20
  2. Ligne avec plusieurs séparateurs
    Par wissem.ba dans le forum Développement de jobs
    Réponses: 1
    Dernier message: 06/05/2011, 11h17
  3. Réponses: 7
    Dernier message: 28/11/2010, 02h53
  4. [Débutant] importer un .txt avec plusieurs séparateurs
    Par Nuestracr dans le forum MATLAB
    Réponses: 20
    Dernier message: 23/10/2009, 14h37
  5. strtok avec plusieurs séparateurs
    Par lalaurie40 dans le forum C
    Réponses: 2
    Dernier message: 10/10/2005, 21h49

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