buscando la cadena con el tiempo en el archivo de registro utilizando script de shell pasando variables

0

Quiero buscar una cadena y restar el tiempo que se encuentra de la hora actual. Cuando se usa, el script debe mostrar las líneas de ese momento o del siguiente período de tiempo de registro.

Puedo buscar la cadena y restar la hora de la hora actual, pero está buscando la hora exacta y está dando un resultado.

Quiero que el guión busque la hora exacta. Si no se encuentra la hora exacta, debería mostrar el resultado desde la hora registrada más cercana a la hora actual y debería mostrar las líneas de registro.

Rendimiento esperado:

Si la cadena y el tiempo no se encuentran en el archivo de registro, la secuencia de comandos debe ser inteligente para elegir entre el tiempo de registro más cercano y mostrar el resultado de ese tiempo a la hora actual cuántos registros hay con esa cadena.

usuario267747
fuente
He limpiado tu publicación, pero la gramática debe limpiarse para transmitir mejor las intenciones de tu pregunta.
raíz
Realmente gracias 'root', y hasta ahora no obtuve ninguna respuesta. En general, ¿cuántos días de tiempo tomará responder mi pregunta?
user267747
¿Podría incluir el resultado esperado al ejecutar su script (con esos parámetros) para ese archivo de registro? Tu explicación de lo que quieres no está muy clara. Además, ¿para qué es el segundo parámetro? ("Script start at")
Ziggy Crueltyfree Zeitgeister
@Ziggy Crueltyfree Zeitgeiste He editado la pregunta y agregado la salida esperada.
user267747
@root como soy nuevo en este sitio, la amabilidad de ayudar en esto, me acaba de editar mi pregunta, de nuevo esta cuestión parece desigual y muy torpe, ¿cómo puedo editar que con correctamente.
user267747

Respuestas:

0

El siguiente script supone que desea encontrar el texto en el parámetro 2, seguido de :, seguido de la fecha en el parámetro 3 formateado como YYYY-M-D-h:m:s, es decir, sin ceros a la izquierda, según el fragmento de su pregunta.

#!/bin/bash

logfile="$1"
message="$2"
timestamp=$(printf '%d-%d-%d-%d:%d:%d' `date -d "$3" +"%Y %m %d %H %M %S"`)

if grep -q "^../../.. ..:..:.. $message : $timestamp\$" "$logfile"; then
  echo "OK: $message $timestamp found on $logfile"
else
  echo "CRITICAL - $message $timestamp not found on $logfile"
  exit 1
fi
Ziggy Crueltyfree Zeitgeister
fuente
¡Gracias por tu esfuerzo! pero mi mal, esto no cumplió con mi requisito.
user267747
No implementé esto " Si la cadena y el tiempo no se encuentran en el archivo de registro, la secuencia de comandos debe ser inteligente para elegir desde el tiempo de registro más cercano y mostrar el resultado desde ese momento hasta la hora actual cuántos registros hay con esa cadena " porque es Demasiado confuso. "Más cercano": ¿hacia atrás o hacia adelante? ¿Mostrar qué resultado? ¿Cuántos registros hay con esa cadena? ¿Qué? Es por eso que le solicité (varias veces) que incluya el resultado esperado, como un simulacro de ejecución: incluya la ejecución del comando y siga cuál es el resultado esperado, y quizás incluya dos o tres de estos con diferentes resultados.
Ziggy Crueltyfree Zeitgeister