ради удовольствия и прокачки пинонячьего навыка
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: я полагаю, что в третьем поле лежит время установки соединения (момент когда сняли трубку), если там пусто, то трубку не снимали