BandaAncha.eu

Comunidad de usuarios
de fibra, móvil y ADSL

¿Como filtrar texto en un archivo log?

BocaDePez
BocaDePez

Alguien sabe como podria hacer esto:

Se crea un archivo log, por ejemplo clase.log.
Contiene diferentes lineas con fecha/hora y otros datos
2 lineas serian por ejemplo:

Sep 15 19:18:43 clase=A1 horario: 09:00 13:30 profesor=marcelo disponible=si
Sep 15 19:20:43 clase=A1 horario: 09:00 13:30 15:00 17:00 profesor=marta disponible=si

Pues bien, desde la consola, quiero obtener/mostrar los resultados de "profesor",en el ejemplo serian marcelo y marta, teniendo en cuenta que puede variar la posicion de "profesor=XXXXXXX" en cada linea del archivo log

Muchas gracias

Este tema está cerrado a nuevas respuestas. Abre un nuevo tema para retomar la conversación.
asqwerty

Lo que quieres es saber como usar expresiones regulares en el shell.

Para sacar todas la lineas que contienen profesor:

~#grep profesor clase.log

Para sacar algo mas complicado

~#man grep

Siento el RTFM pero seguramente te daras cuenta que quieres hacer una cosa bastante especifica y que deberias ser capaz de crearlo y modificarlo tu mismo.

Si lo que quieres es hacer una cosa mas complicada aun mira algun manual de Perl, que puedes hacer maravillas.

🗨️ 6
BocaDePez
BocaDePez

Gracias

Ya estuve mirando las opciones de grep pero no consigo que unicamente me muestre los resultados de "profesor" .
Con cat clase.log |grep -o profesor=
obtengo todas las lineas mostrando "profesor=" pero no el resultado...quizas me falte añadir algo...

Miraré tambien el tema de Perl... pero me ya me da miedo...soy mu novatico....

🗨️ 5
asqwerty

obtengo todas las lineas mostrando "profesor=" pero no el resultado...

¿A que te refieres con el resultado? si sacas todas las lineas con profesor, ¿Que lineas te faltan?

🗨️ 2
BocaDePez
BocaDePez

Quiero que SOLO muestre lo que hay detras de profesor=
el resultado del ejemplo seria:
marcelo
marta

🗨️ 1
asqwerty

creo que ya entendi lo que quieres hacer. suponiendo que el log siempre tenga esa estructura:

parse.pl :

#!/usr/bin/perl
while (<>){
($a)=/profesor=(.*)\sdisponible/;
print "$a\n";
}

y despues:
~#./parse.pl clase.log

te da:

marcelo
marta

🗨️ 1
asqwerty

Así queda mas bonito:

~#perl -e 'while(<>){/profesor=(.*)\sdisponible/;print "$1\n";}' clase.log

RRM

si quieres sacar solo nombre de profesor, y este puede aparecer en cualquier lado, debes usar cut especificando como delimitador por ejemplo el = y especificando que es el segundo que aparece.

🗨️ 3
BocaDePez
BocaDePez

¿ como seria para especificar que es el sengo que aparece ?

Con cat clase.log |grep -o profesor= | cut -d '=' -f1 obtengo
profesor
profesor

Con cat clase.log |grep -o profesor= | cut -d '=' -f1 obtendo 2 lineas vacias

Gracias

🗨️ 2
asqwerty

grep profesor clase.log | cut -d '=' -f3 | awk '{print $1}'

🗨️ 1
BocaDePez
BocaDePez

G R A C I A S !!!!!!

Miraré tambien lo que me pusiste del perl que resulta mu interesante y con muchas posiblidades.