过滤最后几分钟\小时的日志

时间:2017-03-27 04:20:37

标签: bash awk sed grep

我想过滤一个文件,并删除(或写入另一个文件),只有那些日期是"真正"比现在更小,比如说2小时30分钟前(150分钟)。我不需要能找到绝对价值的命令" 2017-03-21 04:36:19" - 然后删除所有行。因为线条不存在很有可能(秒,然后是分钟,这个过滤器会给所有文件不删除)。

我有下一格式的数据:

2017-03-18 01:27:12 bla bla
2017-03-18 02:14:11 bla bla
2017-03-20 04:37:14 bla bla
2017-03-21 02:25:59 bla bla
2017-03-22 05:12:43 bla bla

时间格式: %Y-%m-%d%H:%M:%S

我在谷歌搜索,并通过许多搜索查询尝试第一页上的所有内容。

2 个答案:

答案 0 :(得分:2)

awk -vdate=$(date -d "150 minutes ago" '+%Y-%m-%d%H:%M:%S') \
    '$1$2 >= date { print }' log

答案 1 :(得分:1)

在awk中:

awk '
BEGIN{ now=systime() }     # now in seconds 
{
    then=$1 " " $2         # then might not be a good var name though :)
    gsub(/[-:]/," ",then)  # making mktime fit variable out of then
    then=mktime(then)      # then then to seconds
    if(then < now-604800)  # compare, 604800 is 7 days in seconds
        print              # output older than that
}' file
2017-03-18 01:27:12 bla bla
2017-03-18 02:14:11 bla bla
2017-03-20 04:37:14 bla bla