Как удалить строки в файле журнала старше 14 дней? - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть журнал, который выглядит так:

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 голосов
/ 18 сентября 2018

Я бы использовал 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
0 голосов
/ 18 сентября 2018
$ 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...