¿Filtrar / grep alguna salida solo por cierta columna?

4

¿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.

Marko Kevac
fuente

Respuestas:

15

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
Nathan O'Sullivan
fuente
55
Por cierto, puede escribir la acción como { print }o incluso omitirla por completo (solo awk '$2 != 200'), ya que print $0es la acción predeterminada.
David Z
1
Gracias, es bueno aprender algo respondiendo la pregunta de otra persona.
Nathan O'Sullivan el
0

Esto funcionará:

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

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.

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

que excluye líneas que comienzan con "200" seguidas de cualquier carácter que no sea alfabético o numérico.

Dennis Williamson
fuente