Question Filtrer / grep certaines sorties uniquement par certaines colonnes?


Comment puis-je filtrer certaines sorties uniquement par certaines colonnes?

J'ai besoin de quelque chose comme ça:

tail -f logs/access_log | grep -v "200" --only-in-column=1

Donc, je veux voir uniquement les lignes qui n'ont pas de chaîne '200' dans la première colonne.


4
2017-08-25 07:25


origine




Réponses:


awk est probablement l'outil canonique pour ce genre de problème.

$ cat data
foo 200 bar
foo 200 baz
bar 4   baz

$ cat data | awk '$2 != 200 { print $0 }'
bar 4   baz

13
2017-08-25 07:41



Au fait, vous pouvez écrire l'action comme { print } ou même l'omettre entièrement (juste awk '$2 != 200'), depuis print $0 est l'action par défaut. - David Z
Merci, ravi d'apprendre quelque chose en répondant à la question de quelqu'un d'autre. - Nathan O'Sullivan


Cela fonctionnera:

tail -f logs/access_log | grep -v '^200[[:blank:]]'

ce qui exclut les lignes commençant par "200" suivies d'un espace ou d'une tabulation.

Vous pouvez choisir différents jeux de délimiteurs en fonction de vos besoins.

tail -f logs/access_log | grep -v '^200[^[:alnum:]]'

ce qui exclut les lignes commençant par "200" suivi de tout caractère autre que les caractères alphabétiques ou numériques.


0
2017-08-30 01:35