Estoy tratando de usar el comando grep para extraer la línea que contiene la fecha y la identificación, pero tengo algunas dificultades.
Cuando estoy usando el comando

grep "$(date+"%Y-%m-%d %H:%M:%S")" catalina_pi.log

Esto me está dando cada línea con la fecha, pero cuando estoy haciendo tuberías con el 'id' como

grep "$(date+"%Y-%m-%d %H:%M:%S")" catalina_pi.log | grep "518643640"

Esto está dando la línea que contiene el 'id' pero la fecha y hora no está allí y también un error que dice

date+"%Y-%m-%d %H:%M:%S: command not found

Pero en el primer comando esto no me da ese error. Entonces necesito ayuda para obtener la línea que contiene tanto 'datetime' como 'id'.
Estos son los datos en mi archivo de registro:

[2018-01-31 18:34:44.044] [https-jsse-nio-8443-exec-9] DEBUG c.v.w.handlers.SocketMessageHandler -
                Message received : {"Id":"518643640","userId":"3142"}  
[2018-01-31 18:34:44.044] [https-jsse-nio-8443-exec-9] DEBUG c.v.w.handlers.SocketMessageHandler -
                Message received : {"Id":"518643640","userId":"3142"}  
[2018-01-31 18:34:44.044] [https-jsse-nio-8443-exec-9] DEBUG c.v.w.handlers.SocketMessageHandler -
                Sending message : {"id":301,"errorCode":403,"description":null}  

Mi salida esperada es

[2018-01-31 18: 34: 44.044] [https-jsse-nio-8443-exec-9] DEBUG c.v.w.handlers.SocketMessageHandler - Mensaje recibido: {"Id": "518643640", "userId": "3142"}
[2018-01-31 18: 34: 44.044] [https-jsse-nio-8443-exec-9] DEBUG c.v.w.handlers.SocketMessageHandler - Mensaje recibido: {"Id": "518643640", "userId": "3142"}

0
Anshul Sharma 15 feb. 2018 a las 20:17

2 respuestas

La mejor respuesta

Para obtener la línea que contiene ID y la línea que la precede que contiene DATE, use el siguiente comando.

grep <id> -B1

La opción -B1 imprimirá una línea antes de la línea que contiene la cadena de búsqueda.

Ejemplo:

grep "518643640" -B1

Le dará el siguiente resultado:

[2018-01-31 18:34:44.044] [https-jsse-nio-8443-exec-9] DEBUG c.v.w.handlers.SocketMessageHandler -
            Message received : {"Id":"518643640","userId":"3142"}  
[2018-01-31 18:34:44.044] [https-jsse-nio-8443-exec-9] DEBUG c.v.w.handlers.SocketMessageHandler -
            Message received : {"Id":"518643640","userId":"3142"}  
0
Santosh A 16 feb. 2018 a las 06:50

Para obtener toda la línea,

$ n="2018-01-31 18:34:44.044"
$ grep "$n" file | grep "518643640" file

Para la fecha actual,

$ n=$(date "+%Y-%m-%d %H:%M:%S")

Para obtener solo el Id <digit> siempre que la cadena date exista en la línea,

$ grep "$n" file | grep -o -P '(?<=Id":")[0-9].*(?=",)' file

Otro trazador de líneas usando awk:

$ awk -v var1="$n" -v var2="518643640" '($0 ~ var1 && $0 ~ var2) {print}' file
0
iamauser 15 feb. 2018 a las 18:03