Forum Programmation.shell recherche avec awk

Posté par .
Tags : aucun
1
17
fév.
2010
Bonjour,

Je fais des recherche avec awk dans un fichier log tel que :

awk '/keyword1/ || /keyword2/ {print}' fichier.log


J'aimerai modifier cette commande pour avoir keyword1 et keyword2 et éliminer keyword3 contenu dans les ligne de keyword 1 ou keyword2

Merci de votre aide.
  • # Je suis pas fan de awk mais...

    Posté par . Évalué à 3.

    Je dirais simplement :

    awk '(/keyword1/ || /keyword2/) && !/keyword3/ {print}' fichier.log

    C'est pas bien de faire faire ses exercices sur linuxfr ;)...
    • [^] # Re: Je suis pas fan de awk mais...

      Posté par . Évalué à 1.

      Merci Christophe,

      Ce n'est pas un exercice mais une vraie interrogation ;-)
    • [^] # Re: Je suis pas fan de awk mais...

      Posté par . Évalué à 3.

      Soit j'ai mal compris l'énoncé, et tu as bien répondu, soit tu n'as pas bien répondu ....

      awk '(/keyword1/ || /keyword2/) {gsub (/keyword3/,"");print}' fichier.log
      • [^] # Re: Je suis pas fan de awk mais...

        Posté par . Évalué à 1.

        En effet maintenant que tu le dis... je suis aussi dans le flou ;).
      • [^] # Re: Je suis pas fan de awk mais...

        Posté par . Évalué à 3.

        Je ne connaissait pas la fonction gsub (j'utilisais toujours sub).

        Pour les décideurs pressés sub fait une substitution mais uniquement sur le premier motif qui match dans la chaine et gsub fait la même chose mais sur toute la chaine.

        Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

  • # sed !

    Posté par . Évalué à 2.

    sed '/keyword1\|keyword2/ { s/keyword3//g}'

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.