¿Cómo puedo filtrar alguna salida solo por cierta columna?
Necesito algo como esto:
tail -f logs/access_log | grep -v "200" --only-in-column=1
Entonces, quiero ver solo las líneas que no tienen la cadena '200' en la primera columna.
awk es probablemente la herramienta canónica para este tipo de problema.
$ cat data
foo 200 bar
foo 200 baz
bar 4 baz
$ cat data | awk '$2 != 200 { print $0 }'
bar 4 baz
{ print }
o incluso omitirla por completo (soloawk '$2 != 200'
), ya queprint $0
es la acción predeterminada.Esto funcionará:
que excluye líneas que comienzan con "200" seguidas de un espacio o una pestaña.
Puede elegir diferentes conjuntos de delimitadores según sus necesidades.
que excluye líneas que comienzan con "200" seguidas de cualquier carácter que no sea alfabético o numérico.
fuente