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] lignes qui se suivent avec le champs $2 identiques


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de VinnieMc
    Inscrit en
    Décembre 2005
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 208
    Par défaut [awk] lignes qui se suivent avec le champs $2 identiques
    Bonjour,

    j'ai un fichier de la forme suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    les DT le
    voitures NN voiture
    rouges ADJ rouge
    sont V être
    dehors ADV dehors
    j'aimerais, par exemple, récupérer les noms précédés d'un déterminant, dans le cas ci-dessus je devrais avoir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    les DT le
    voitures NN voiture
    j'ai cette ligne de code en awk mais elle ne marche pas, et je ne sais pas pourquoi (j'utilise -F'\t' parce que le séparateur de champs est la tabulation):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    awk -F'\t' '$2 == "NN" && prev == "DT" {print; prev=$2}'
    D'avance merci.

  2. #2
    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,


    L'un des problème de ton awk concerne la première ligne : prev n'est pas renseigné dans ce cas.

    Sinon, la commande suivante affiche la ligne courante si $2=NN et si $2 de la ligne précédente valait DT :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     awk -F' ' '{ if ($2 == "NN" && prev == "DT") { print $0 } ; prev=$2}'  nom_du_fichier_a_traiter
    awk ne permet pas de travailler sur plusieurs lignes en même temps, donc tu ne pourras pas afficher ET la ligne courante ET la précédente (à moins de la sauvegarder dans une variable).

    On arrive donc au code qui se souvient de la ligne précédente :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk -F' ' '{ if ($2 == "NN" && prev == "DT") { print ligne_prev ; print $0 } ; prev=$2 ; ligne_prev=$0}' nom_du_fichier_a_traiter
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  3. #3
    Membre confirmé Avatar de VinnieMc
    Inscrit en
    Décembre 2005
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 208
    Par défaut
    Merci beaucoup gangsoleil, ça fonctionne très bien.

    A bientôt.

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 09/09/2014, 11h04
  2. Réponses: 9
    Dernier message: 27/05/2008, 11h42
  3. Group by sur Produit mais avec date qui se suivent
    Par suantay dans le forum Langage SQL
    Réponses: 9
    Dernier message: 29/02/2008, 12h13
  4. Réponses: 2
    Dernier message: 26/04/2006, 08h53
  5. [AWK] récupération de lignes qui se suivent
    Par PtiNico dans le forum Linux
    Réponses: 2
    Dernier message: 12/04/2005, 19h44

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