我有一个看起来像这样的日志:
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,但是这些示例并不是最容易运行并且仍然易于阅读。
答案 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)
我将使用awk
和date
:
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