Вопрос Фильтр / grep выводятся только определенным столбцом?


Как я могу отфильтровать некоторый вывод только определенным столбцом?

Мне нужно что-то вроде этого:

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

Поэтому я хочу видеть только строки, которые не имеют строки «200» в первом столбце.


4
2017-08-25 07:25


происхождения




ответы:


awk, вероятно, является каноническим инструментом для такого рода проблем.

$ 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



Кстати, вы можете написать действие как { print } или даже опустить его полностью (просто awk '$2 != 200'), поскольку print $0 это действие по умолчанию. - David Z
Спасибо, приятно узнать что-то, отвечая на чужой вопрос. - Nathan O'Sullivan


Это будет работать:

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

который исключает строки, начинающиеся с «200», а затем пробел или вкладку.

Вы можете выбрать различные наборы разделителей в зависимости от ваших потребностей.

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

который исключает строки, начинающиеся с «200», за которыми следует любой символ, отличный от алфавитных или числовых символов.


0
2017-08-30 01:35