
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 | awk
función las líneas de último minuto?
Las fechas están escritas en un +%H:%M:%S
formato.
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 date
y 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 bash
y 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)