Obtenga las líneas fechadas de último minuto de la lista

Obtenga las líneas fechadas de último minuto de la lista

Si tengo un archivo de entrada con una lista de usuarios y las fechas en las que iniciaron sesión por última vez, ¿cómo puedo seleccionar con una sort | awkfunción las líneas de último minuto?

Las fechas están escritas en un +%H:%M:%Sformato.

Ejemplo:

George 12:00:15 
Max    12:01:03 
Kate   10:32:54 
Adam   08:21:47 
Andrea 12:00:10

La fecha actual es12:01:04

Los resultados de una función if serían las líneas 1, 2 y 5

Respuesta1

Con GNU datey awk:

awk -F'[ :]+' -v l=$(date -d '1 minutes ago' "+%H:%M") -v c=$(date "+%H:%M") '
    $2":"$3==l || $2":"$3==c
' file
George 12:33:15 
Max    12:33:03 
Andrea 12:33:10

Respuesta2

Con GNU awk:

awk 'BEGIN{t=strftime("%T",systime()-60)}$NF >= t'

Respuesta3

En bashy usando GNU date(predeterminado en la mayoría de los sistemas Linux), puede hacer esto:

threshold=$(( $(date -d 12:01:04 +%s) - 60 ))
paste file <(awk '{ print $2 }' file | date -f - +%s) |
  awk '$3 > '"$threshold"' { print $1,$2 }'

O para conservar el formato según el ejemplo de la pregunta:

threshold=$(( $(date -d 12:01:04 +%s) - 60 ))
paste file <(awk '{ print $2 }' file | date -f - +%s) |
  awk '$3 > '"$threshold" |
  cut -c 1-15

Producción:

George 12:00:15
Max    12:01:03
Andrea 12:00:10

Para ver un ejemplo real, también puede establecer la fecha "hace 1 minuto" (según la respuesta de Gnouc). La primera línea sería:

threshold=$(date -d '1 minute ago' +%s)

información relacionada