Mis archivos de registro están en formato clave-valor. Quiero encontrar el valor de una clave particular en la cola -f .. Supongamos que una de las líneas en el registro es:

ts=2016-12-23-18-31-34-849 | deviceType=LENOVO Lenovo A6000 | elapsed=11 | firstHomePage=null | installId=37797b61-0bb1-4c1a-844c-5904c7e83de8 | ip=157.48.104.146 
ts=2016-12-23-18-31-34-849 | deviceType=LENOVO Lenovo A6000 | elapsed=15 | firstHomePage=null | installId=37797b61-0bb1-4c1a-844c-5904c7e83de8 | ip=157.48.104.146 

No estoy seguro de cómo canalizo la salida de mi cola -f para que la salida deba seguir

11
15
0
Deepak Singhal 23 dic. 2016 a las 16:03

3 respuestas

La mejor respuesta

Use GNU grep con el comando --line-buffered para almacenar en el búfer stdout cuando llegue en caso de que el archivo crezca continuamente. El indicador -o para hacer coincidir solo el patrón y -P para habilitar las capturas de estilo perl regEx.

tail -f file | grep --line-buffered -oP "elapsed=\K(\d+)"
11
15

Desde la página man grep,

--line-buffered
         Use line buffering on output.
2
Inian 23 dic. 2016 a las 13:22

Prueba grep:

tail log_file | grep -o '\<elapsed=[^[:space:]]*' | cut -d= -f2
2
xhienne 23 dic. 2016 a las 13:18
awk -F'[=|]' '{print $6}' file
11 
15 
0
Claes Wikner 23 dic. 2016 a las 16:20