Questão Filtrar / grep alguma saída apenas por determinada coluna?


Como posso filtrar alguma saída apenas por determinada coluna?

Eu preciso de algo assim:

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

Por isso, quero ver apenas as linhas que não tenham a string '200' na primeira coluna.


4


origem




Respostas:


O awk é provavelmente a ferramenta canônica para esse tipo de problema.

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

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

13



By the way, você pode escrever a ação como { print } ou mesmo omitir isso completamente awk '$2 != 200'), Desde a print $0 é a ação padrão. - David Z
Obrigado, prazer em aprender alguma coisa, respondendo a pergunta de outra pessoa. - Nathan O'Sullivan


Isso vai funcionar:

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

que exclui as linhas que começam com "200" seguidas por um espaço ou uma tabulação.

Você pode escolher diferentes conjuntos de delimitadores, dependendo de suas necessidades.

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

que exclui as linhas que começam com "200" seguidas por qualquer caractere diferente de caracteres alfabéticos ou numéricos.


0