Obtenha as últimas linhas com data da lista

2

Se eu tiver um arquivo de entrada com uma lista de usuários e as datas em que ele fez o login pela última vez, como selecionar com uma função sort | awk as linhas do último minuto?

As datas são escritas em um formato +%H:%M:%S .

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 1a, 2a e 5a linhas

    
por MEZesUBI 27.06.2014 / 18:43

3 respostas

0

Em bash e usando o 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 na 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 fazer a data "1 minuto atrás" (conforme a resposta de Gnouc). A primeira linha seria:

threshold=$(date -d '1 minute ago' +%s)
    
por 27.06.2014 / 19:35
1

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
    
por 27.06.2014 / 19:35
1

Com o GNU awk:

awk 'BEGIN{t=strftime("%T",systime()-60)}$NF >= t'
    
por 27.06.2014 / 23:35