如何删除超过14天的日志文件中的行?

时间:2018-09-18 04:21:06

标签: bash logging awk

我有一个看起来像这样的日志:

2018-09-18 03:29:38 [info]: /up request - ip: 63.143.42.249
2018-09-18 03:34:38 [info]: /up request - ip: 63.143.42.249 
2018-09-18 03:39:38 [info]: /up request - ip: 63.143.42.249 

我正在尝试使用bash或其他脚本语言删除所有14天以上的行。有人对此有建议吗?我已经看过GNU awk,但是这些示例并不是最容易运行并且仍然易于阅读。

2 个答案:

答案 0 :(得分:7)

$ cat file
1818-09-18 03:29:38 [info]: /up request - ip: 63.143.42.249
2018-09-18 03:34:38 [info]: /up request - ip: 63.143.42.249 

使用GNU awk和mktime()

$ awk '
BEGIN { 
    now=systime()        # now in epoch time
    fn=60*60*24*14       # fortnight in seconds
}
{
    dt=$1 " " $2         # create datetime
    gsub(/[:-]/," ",dt)  # replace - and : with space for mktime() (see doc above)
}
mktime(dt)>now-fn        
' file

输出:

2018-09-18 03:34:38 [info]: /up request - ip: 63.143.42.249 

保证您花了我节省的时间来学习awk。

答案 1 :(得分:3)

我将使用awkdate

awk -v d="$(date -d "14 days ago" "+%F%T")" '$1 $2 > d' file

或者,为了提高可读性

fortnight="$(date -d "14 days ago" "+%F%T")"
awk -v d="$fortnight" '$1 $2 > d' file
# or, depending on your taste
awk  '$1 $2 > d'  d="$fortnight"  file