Обработка логов SQUID [SOLVED]
Доброго времени суток!
Есть файл access.log в котором время указанно в UNIX формате.
Задача преобразования времени сводилась к скрипту
#! /usr/bin/perl -p
s/^\d+\.\d+/localtime $&/e;
Перл не знаю. Результат меня немного не устроил невозможностью форматирования вывода даты (или я не нашел как). Поэтому допилил немного по другому
cat access.log | perl -pe 's/^(\d+)\.\d+//;system ("date","-d@ $1","+%A %d.%m.%Y %H:%M:%S");'
В данном случае все хорошо но появился побочный эффект от которого нужно избавиться:
Вторник 09.11.2010 13:40:40
109 192.168.2.10 TCP_HIT/200 47065 GET http://3d4u.3dn.ru/interny.jpg - NONE/- image/jpeg
Дата пишется но после нее идет перенос строки - как его убрать?
Решение
#! /usr/bin/perl -p
use POSIX qw(strftime);
s/^\d+\.\d+/strftime('%A %d-%m-%Y %H:%M:%S ',localtime $&)/e;
Результат
Вторник 09.11.2010 13:40:40 109 192.168.2.10 TCP_HIT/200 47065 GET http://3d4u.3dn.ru/interny.jpg - NONE/- image/jpeg
- Для комментирования войдите или зарегистрируйтесь
http://www.squid-cache.org/Ve
http://www.squid-cache.org/Versions/v3/3.1/cfgman/logformat.html
Не грусти, товарищ! Всё хорошо, beautiful good!
это все хорошо и понятно, но
это все хорошо и понятно, но даннные уже собранны 1,5 Г и надо их обработать...
http://www.mrunix.net/webaliz
http://www.mrunix.net/webalizer/
ИМХО стандарт дефакто :) *
ИМХО стандарт дефакто :)
Working on Gentoo Linux for Asus P535 and Qtopia :-)
Граждане я про SARG в курсе
Граждане я про SARG в курсе как анализатор
данные будут обрабатыватся другой программой
задача в том что бы дата и время были на одной строке с остальными данными.
Скрипт
#! /usr/bin/perl -p
s/^\d+\.\d+/localtime $&/e;
так делает но меня не устроил формат даты и времени
s/^(\d+)\.\d+//;system ("date","-d@ $1","+%A %d.%m.%Y %H:%M:%S");
дает то что мне нужно но добавляет в конец символ перевода строки - вопрос как его убрать?
Попробовать
s/^(\d+)\.\d+//;system ("date","-d@ $1","+%A %d.%m.%Y %H:%M:%S");| tr '\n' ' '
-транслировать символ перевода каретки в пробел.
Я в perl'е - нуль.
очевидно, что второй '\n'
очевидно, что второй '\n' добавляет от себя системный вызов date. Не так надо просто.
use Date::Format;
$formatted_date = time2str("%A %d.%m.%Y %H:%M:%S", $1);
Не грусти, товарищ! Всё хорошо, beautiful good!
#! /usr/bin/perl -p use
#! /usr/bin/perl -p
use Date::Format;
$formatted_date = time2str("%A %d.%m.%Y %H:%M:%S", $1);
s/^\d+\.\d+/localtime $&/e;
Так получается?
#! /usr/bin/perl -p use
#! /usr/bin/perl -p
use Date::Format;
formatted_date = time2str("%A %d.%m.%Y %H:%M:%S", $1);
s/^\d+\.\d+/localtime $&/e;
выдает
Can't modify constant item in scalar assignment at ./time2.pl line 4, near ");"
че он хочет я не знаю :(
Пришел к следующему
Пришел к следующему решению:
#! /usr/bin/perl -p
use POSIX qw(strftime);
s/^\d+\.\d+/print strftime('%A %d-%m-%Y %H:%M:%S ',localtime $&)/e;
Результат
Вторник 09-11-2010 13:37:27 1 114 192.168.2.10 TCP_HIT/200 1176 GET http://infosim.ucoz.ru/.s/t/977/2.gif - NONE/- image/gif
Откуда берется 1 после даты времени - хз
Пока РЕШЕНО но если кто подскажет буду благодарен
Функция print возвращает 1,
Функция print возвращает 1, но она там и не нужна.
И правда получилось...
И правда получилось... Спасибо всем