Escribo a continuación un guión corto awk
para esto:
nodestat |awk -v Yday="$(date -d "$(date -d '-1day' '+%Y-%m-%d 00:00:00')" +%s)" -F"[,]" \
'{ Mdate=$(NF-1)" "$NF;
dMepoch="date -d""\""Mdate"\""" +%s";
dMepoch |getline Mdate; close(dMepoch)
}
$0 ~ /node mode : produce/ && NR==1 && Mdate<Yday{tru++;next}
{print($0 ~ /node status: active/ && NR==2 && Mdate<Yday && tru)?"OK":"NOT OK";exit
}'
OK
$(date -d "$(date -d '-1day' '+%Y-%m-%d 00:00:00')" +%s)
, primero obtenemos la fecha de ayer en este formato Y-m-d 00:00:00
por $(date -d '-1day' '+%Y-%m-%d 00:00:00')
, luego la convertimos a tiempo de época y la asignamos a la variable llamada Yday
. F"[,]"
, estamos definiendo el separador archivado como coma y espacio . Mdate=$(NF-1)" "$NF;
, según el separador de archivos, tomamos los últimos dos campos en una variable llamada Mdate
que contiene solo fecha , luego; dMepoch="date -d""\""Mdate"\""" +%s";
, configuramos un comando de shell como date -d""\""Mdate"\""" +%s
y lo asignamos a una variable llamada dMepoch
; y con dMepoch |getline Mdate;
llamamos al comando anterior Usando getline desde un Pipe con el valor de Mdate
pasando a él para obtener su época y mantener la misma variable Mdate
también, entonces; close(dMepoch)
para cerrarlo.Ahora tenemos tanto la fecha de ayer como la fecha de cada fila de nodestat
en la época que leerá cada línea awk
. Más tarde por
$0 ~ /node mode : produce/ && NR==1 && Mdate<Yday{tru++;next}
, estamos comprobando si es la primera línea NR==1
y modificamos la hora (la época guardada enMdate
)es anterior a la fecha de ayer (la época enYday
)y la línea contiene node mode : produce
, luego establecemos una bandera tru++
y ejecute awk
para la línea next
, entonces
En print($0 ~ /node status: active/ && NR==2 && Mdate<Yday && tru)?"OK":"NOT OK";exit
, estamos ahogando el mismo tiempo de modificación en la segunda línea NR==2
y contiene nuestra coincidencia y también si todas las condiciones se cumplieron en la primera línea tru!=0
, luego imprima "OK", de lo contrario imprima "NO OK "por condición ternaria print (condition)?if_true:if_false
. El exit
se usa aquí siempre que si la primera línea no cumple con las condiciones y en la primera ejecución de awk
imprimirá "NO CORRECTO" y saldrá, lo que evitará la duplicación de "NO CORRECTO".