
Se eu tiver um arquivo de entrada com uma lista de usuários e as datas em que foram conectados pela última vez, como posso selecionar com uma sort | awk
função as linhas de última hora?
As datas são escritas em um +%H:%M:%S
formato.
Exemplo:
George 12:00:15
Max 12:01:03
Kate 10:32:54
Adam 08:21:47
Andrea 12:00:10
A data atual é12:01:04
Os resultados de uma função if seriam a 1ª, 2ª e 5ª linhas
Responder1
Com GNU date
e 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
Responder2
Com GNU awk:
awk 'BEGIN{t=strftime("%T",systime()-60)}$NF >= t'
Responder3
Dentro bash
e usando GNU date
(padrão na maioria dos sistemas Linux), você pode fazer isso:
threshold=$(( $(date -d 12:01:04 +%s) - 60 ))
paste file <(awk '{ print $2 }' file | date -f - +%s) |
awk '$3 > '"$threshold"' { print $1,$2 }'
Ou para preservar a formatação conforme o exemplo da pergunta:
threshold=$(( $(date -d 12:01:04 +%s) - 60 ))
paste file <(awk '{ print $2 }' file | date -f - +%s) |
awk '$3 > '"$threshold" |
cut -c 1-15
Saída:
George 12:00:15
Max 12:01:03
Andrea 12:00:10
Para um exemplo real, você também pode marcar a data '1 minuto atrás' (conforme a resposta do Gnouc). A primeira linha seria:
threshold=$(date -d '1 minute ago' +%s)