如果我有一个包含用户列表及其上次登录日期的输入文件,如何使用函数选择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 date
和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
答案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)