¿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.
¿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:
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
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.
{ print }
o incluso omitirla por completo (soloawk '$2 != 200'
), ya queprint $0
es la acción predeterminada.