4

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

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

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

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

2 ответа2

15

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

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

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

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

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

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .