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

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

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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.