Как я могу отфильтровать вывод только по определенному столбцу?
Мне нужно что-то вроде этого:
tail -f logs/access_log | grep -v "200" --only-in-column=1
Поэтому я хочу видеть только те строки, которые не имеют строки «200» в первом столбце.
awk, вероятно, канонический инструмент для решения подобных проблем.
$ cat data
foo 200 bar
foo 200 baz
bar 4 baz
$ cat data | awk '$2 != 200 { print $0 }'
bar 4 baz
Это будет работать:
tail -f logs/access_log | grep -v '^200[[:blank:]]'
который исключает строки, начинающиеся с "200", за которым следует пробел или табуляция.
Вы можете выбрать различные наборы разделителей в зависимости от ваших потребностей.
tail -f logs/access_log | grep -v '^200[^[:alnum:]]'
исключая строки, начинающиеся с "200", за которыми следуют любые символы, кроме буквенных или цифровых символов.