Добрый день,
есть задача вывести записи лога за последние, скажем, 5 минут (в консоли).
Для примера, возьмем лог апача:
192.168.1.58 - - [22/Aug/2011:09:05:17 +0400] "GET /199_5.wml?MSISDN=79608070662 HTTP/1.1" 200 1036
192.168.1.58 - - [22/Aug/2011:09:05:17 +0400] "GET /1564.wml?MSISDN=79655809709 HTTP/1.1" 200 955
192.168.1.53 - - [22/Aug/2011:09:05:17 +0400] "GET /62_1.wml?MSISDN=79659016029 HTTP/1.1" 200 1479
192.168.1.53 - - [22/Aug/2011:09:05:18 +0400] "GET /t?%D0%9C%D0%BE%D1%81%D0%BA%D0%B2%D0%B0_weather_31.wml&MSISDN=79654735129 HTTP/1.1" 200 1043
192.168.1.53 - - [22/Aug/2011:09:05:18 +0400] "GET /t1460.wml?MSISDN=79655928820 HTTP/1.1" 200 1608
192.168.1.53 - - [22/Aug/2011:09:05:19 +0400] "GET /t1296.wml?MSISDN=79657643890 HTTP/1.1" 200 1632
192.168.1.53 - - [22/Aug/2011:09:05:19 +0400] "GET /199_91.wml?MSISDN=79682796781 HTTP/1.1" 200 2128
192.168.1.58 - - [22/Aug/2011:09:05:19 +0400] "GET /199_8.wml?MSISDN=79058638052 HTTP/1.1" 200 1946
192.168.1.53 - - [22/Aug/2011:09:05:19 +0400] "GET /t?%D0%BB%D0%BE%D1%82%D1%8B%D1%88%D1%96%D0%BD%D0%BE_weather.wml&MSISDN=79652063174 HTTP/1.1" 404 312
192.168.43.58 - - [22/Aug/2011:09:05:20 +0400] "GET /wap.wml?MSISDN=79676631039 HTTP/1.1" 200 994
Лог состоит из строк. Строки лога снабжены временной меткой и каким-то сообщением.
Алгоритм видится такой:
1) cat log_file
2) передать вывод по конвейеру в awk:
3) в awk для каждой строки преобразовать строковую временную метку в кол-во секунд от 01.01.1970
4) если полученное значение больше чем systime() - 300 (5 мин), то делаем print строки лога иначе переход к следующей строке (systime возвращает текущее кол-во секунд от 01.01.1970)
5) далее выхлоп awk через конвеер мне нужно грепить по ключевым словам.
Затык на 3-м шаге алгоритма: как в awk преобразовать строку вида "22/Aug/2011:09:05:19 +0400" в кол-во секунд от 01.01.1970?
Рассмотрю другие способы решения задачи (например awk+perl). НО. Обязательно нужен конвейер в консоли.
Заранее благодарю!