ради удовольствия и прокачки пинонячьего навыка 

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