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 - Recherche de lignes


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2
    Par défaut AWK - Recherche de lignes
    Bonjour,

    Je cherche à écrire un petit script avec l'algo suivant : Soit un fichier, je voudrais que si une ligne commence par 1 et la ligne suivante par 4 afficher le numéro de ligne et incrémenter un compteur pour compter le nombre d'occurences trouvées.

    Merci d'avance pour vos suggestions.

  2. #2
    Membre émérite Avatar de jmelyn
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2007
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2007
    Messages : 703
    Par défaut
    Quelque chose comme ce qui suit devrait fonctionner.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    awk '
    /^1/ \
    {
      getline
      if ($0 ~ /^4/) {print "found in line:", NR - 1; found++}
    }
    END {printf "total %s\n", found}' input_file

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2
    Par défaut
    Merci jmelyn pour ta réponse.

    Cela répondait parfaitement à mon problème, voici le code final :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    root# more SEQ-14-V2.awk
    BEGIN {found=0;};
    /^1/ \
    {
      line=$0
      getline
      if ($0 ~ /^4/) {print "found in line:", NR - 1, "\n", line, "\n", $0; found++}
    }
    END {printf "total %s\n", found}
    root#

  4. #4
    Membre émérite Avatar de jmelyn
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2007
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2007
    Messages : 703
    Par défaut
    Bonjour,

    La commande que j'ai donnée n'est pas complètement correcte: Il existe au moins un cas où elle ne fonctionnera pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    1 bla bla bla
    1 bla bla bla
    4 bla bla bla
    Voici donc une commande modifiée qui fonctionne mieux:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    awk '
    {
      if ($0 ~ /^1/) {prev1 = 1}
      else
      {
        if ($0 ~ /^4/ && prev1 == 1)
        {
          print "pattern found in lines", NR-1, "-", NR
          total++
        }
        prev1 = 0
      }
    }
    END {printf "===========\ntotal found %s\n", total}' fichier
    Remarques:
    Les variables de awk n'ont pas besoin d'être initialisées. Par défaut elles sont à zéro si employées numériquement ou "" si employées comme chaine.
    Le point-virgule est un séparateur, à insérer entre deux commandes sur une même ligne. Autrement il n'a pas d'utilité.

    Edit: Changement de nom de variable, pour plus de clarté et correction d'un bug (encore un ).

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

Discussions similaires

  1. [VBA-E] rechercher une ligne pour remplacer?
    Par zouille dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 31/12/2005, 10h31
  2. Rechercher une ligne vide
    Par nico-pyright(c) dans le forum Traitement d'images
    Réponses: 7
    Dernier message: 22/12/2005, 17h10
  3. Fonction de recherche de ligne...
    Par Zenol dans le forum Langage
    Réponses: 6
    Dernier message: 05/12/2005, 19h26
  4. [AWK] récupération de lignes qui se suivent
    Par PtiNico dans le forum Linux
    Réponses: 2
    Dernier message: 12/04/2005, 19h44
  5. Awk - Traiter chaque ligne du fichier passwd
    Par tony montana dans le forum Linux
    Réponses: 7
    Dernier message: 25/03/2004, 09h40

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