從清單中取得最後一分鐘的日期行

從清單中取得最後一分鐘的日期行

如果我有一個包含使用者清單及其上次登入日期的輸入文件,如何使用函數選擇sort | awk最後一分鐘的行?

日期以某種+%H:%M:%S格式寫入。

例子:

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

目前日期是12:01:04

if 函數的結果將會是第一、二、五行

答案1

GNU dateawk

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

答案2

使用 GNU awk:

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

答案3

bash並使用 GNU date(大多數 Linux 系統上的預設設定)中,您可以執行以下操作:

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

或按照問題中的範例保留格式:

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

輸出:

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

對於一個真實的例子,您也可以將日期設定為「1 分鐘前」(根據 Gnouc 的回答)。第一行是:

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

相關內容