Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Большие файлы. установить указатель 
:(
    Опции темы
al0ns0
Дата 31.8.2007, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 26.7.2007

Репутация: нет
Всего: нет



Мне нужна отпарсить squid access.log, за месяц он разрастается на 100mb.
скрипт стартует кронам каждый день,каждый час. Мне нужна что бы при новом старте, парсинг начинался с последнего.
Это легко делает если в массив записать содержимое файла, но 100mb писать в массив это не годиться=)

Что делать?
PM MAIL   Вверх
shamber
Дата 31.8.2007, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

Репутация: 17
Всего: 18



al0ns0, а если резать файл на части?
PM MAIL Jabber   Вверх
amg
Дата 31.8.2007, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 38
Всего: 50



Логичнее воспользоваться logrotate (если рутовые права доступны, конечно)
PM MAIL   Вверх
Nab
Дата 31.8.2007, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 582
Регистрация: 25.3.2006
Где: Kiev

Репутация: 26
Всего: 37



Правильней настроить logrotate у самого сквида. Потом можно воспользоваться уже готовыми решениями, sarg или lightsquid. Последний написан нашим парнем, и тоже на перле smile Но он парсит лог минимум за сутки, каждый час смысла не имеет, хотя с последнего моего общения может что и изменилось.


--------------------
 Чтобы правильно задать вопрос нужно знать больше половины ответа...
Perl Community 
FREESCO in Ukraine 
PM MAIL   Вверх
Ramirez
Дата 31.8.2007, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 305
Регистрация: 18.1.2005
Где: Moscow, ExUSSR

Репутация: 4
Всего: 5



логичнее конечно резать файл по дням.

но если всетаки хочется парсить один большой, то я бы наверное делал так:

1. отпарсили. запомнили номер последней ст роки и дату создания файла.
2. при след запуске проверили дату создания файла
    а. если дата создания файла другая - значит начинать парсить с начала
    б. если дата не изменилась, то парсим начиня с запомненной строчки



чтобы "прокручивать" файл к нужному месту, можно посмотреть в сторону http://search.cpan.org/~gbarr/IO-1.2301/IO/Seekable.pm

а можно просто тупо в цикле читать и пропускать строчки, если скорость не критична.

Это сообщение отредактировал(а) Ramirez - 31.8.2007, 14:26
PM ICQ   Вверх
Sadok
Дата 1.9.2007, 09:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 2.11.2004

Репутация: 1
Всего: 2



Ramirez
Надо не номер строки запоминать, а смещение в байтах.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0650 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.