Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: 1 [2]  Все   Вниз
  Печать  
Автор Тема: Работа с логами  (Прочитано 36081 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #30 : 19-05-2011 18:18 » 

ради удовольствия и прокачки пинонячьего навыка Улыбаюсь
Код: (Python)
import sys

def check_phone(date, nums, num_a, num_b):
    return date[2:4] == '04' and (num_a in nums or num_b in nums)

def dtime_to_str(tstr):
    return "%s:%s:%s" % (tstr[:2], tstr[2:4], tstr[4:])

def time_delta(from_date, to_date):
    f_h = int(from_date[:2])
    f_s = int(from_date[2:4])*60 + int(from_date[4:])
    t_h = int(to_date[:2])
    t_s = int(to_date[2:4])*60 + int(to_date[4:])
    if (t_h < f_h):
        t_h += 24 - f_h
    f_tm = f_h*3600 + f_s
    t_tm = t_h*3600 + t_s
    return t_tm - f_tm

for line in sys.stdin:
    line = line.strip()
    fields = line.split(' ')
    dfield = fields[0]
    num_a = fields[-2]
    num_b = fields[-1]
    if not check_phone(dfield, ['9615574500', '532416'] ,num_a.strip('-'),num_b.strip('-')):
        continue
    start_time = fields[1]
    date_day = "20%s-%s" % (dtime_to_str(dfield), dtime_to_str(start_time))
    con_time = fields[2]
    term_time = fields[3]
    term_time_str = dtime_to_str(term_time)
    dur = 0
    con_time_str = '--------'
    if (con_time != '000000'):
        dur = time_delta(con_time, term_time)
        con_time_str = dtime_to_str(con_time)
    print "%s %s %s %05s %s %s" % (date_day, con_time_str, term_time, dur, num_a, num_b)

Добавлено через 11 минут и 30 секунд:
запускается строчкой
find . -name *201104*.log | while read f; do cat $f; done|python tel.py
2011:04:26-01:09:55 -------- 011008     0 564593------------ 9615574500
2011:04:26-01:02:56 01:03:07 011152   525 532416------------ ----------


Добавлено через 3 минуты и 20 секунд:
думаю если задача частая, то имеет смысл создать инфраструктуру которая будет инкрементально наполнять БД новыми звонками (думаю лучше хранить все поля), а потом по ней делать запрос

PS: я полагаю, что в третьем поле лежит время установки соединения (момент когда сняли трубку), если там пусто, то трубку не снимали
« Последнее редактирование: 19-05-2011 18:43 от Антон (LogRus) » Записан

Странно всё это....
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #31 : 19-05-2011 19:01 » 

Если нужно разово достать, а не периодически доставать данные за разные периоды, то лучше без базы обойтись, т.к. объемы большие.

Можно попробовать без C++ - скриптами. Например:

Код: (DOS) test.bat
@echo off

for /f "usebackq tokens=*" %%a in (`dir *.log /B /ON`) do for /f "usebackq tokens=*" %%b in (%%a) do call :filter %%b
goto :eof

:filter
for /f "usebackq tokens=1,2" %%a in ('%*') do if %%a GTR 110300 if %%a LSS 110400 if %%b GTR 003000 if %%b LSS 010000 echo %*
goto :eof

Выборка файлов, фильтрация строк по дате и по диапазону времени 00:30:00..00:59:59.
« Последнее редактирование: 19-05-2011 19:04 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Страниц: 1 [2]  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines