Обработка логов 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

ИМХО стандарт дефакто :) *

ИМХО стандарт дефакто :)

* net-analyzer/sarg
     Available versions:  2.2.5-r5 ~2.3.1 ~2.3.1-r1
     Homepage:            http://sarg.sourceforge.net/sarg.php
     Description:         Squid Analysis Report Generator

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, но она там и не нужна.

s/.../strftime(...)/e;
print

И правда получилось...

И правда получилось... Спасибо всем

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".