Enviado em 06/05/2017 - 15:27h
Olá Amigos,
estou tentando tratar um arquivo de log bem grande (172mb) que tem aproximadamente 25000000 linhas.
Dentre estas linhas, diversas vezes aparecem a linha:
DEBUG (0): SORVEDOURO: [trans=6] [origem=24] [slot 0] [cont-0] [time=5005].
Onde o início não muda nunca (DEBUG (0): SORVEDOURO:).
Além desta linha, uma outra linha, dentre muitas me interessa:
DEBUG (4): ENVIAR_PKT_DADOS: destino 27 slot 3 [cont 0] no tempo=4095.
O que eu preciso fazer: Ler o arquivo de log, fazendo um split de cada linha e procurando pela linha que case exatamente com DEBUG (0): SORVEDOURO:.
Assim que encontrar, preciso armazenar 3 variáveis: origem, tempo_final e controle.
Por exemplo:
DEBUG (0): SORVEDOURO: [trans=6] [origem=24] [slot 0] [cont-0] [time=5005].
origem=24, controle=0 e tempo_final=5005
A partir daí, preciso fazer uma nova procura em todo o log pela linha que case com a origem: DEBUG (origem): ENVIAR_PKT_DADOS: destino 27 slot 3 [cont 0] no tempo=4095. (a origem é 24, vindo da primeira pesquisa). Assim que encontrar, preciso armazenar 2 variáveis:tempo_inicial e controle_no.
Por exemplo:
DEBUG (24): ENVIAR_PKT_DADOS: destino 27 slot 3 [cont 0] no tempo=4095.
tempo_inicial=4095 e controle_no=0
Após isso, preciso verificar se os dois controles são iguais
O ideal seria gravar esses valores em um arquivo txt, porém como não sei fazer, iria imprimir na tela mesmo e o famoso ctrl+c / ctrl+v para ajudar.
Até agora consegui fazer está parte, como muitos erros:
estou tentando tratar um arquivo de log bem grande (172mb) que tem aproximadamente 25000000 linhas.
Dentre estas linhas, diversas vezes aparecem a linha:
DEBUG (0): SORVEDOURO: [trans=6] [origem=24] [slot 0] [cont-0] [time=5005].
Onde o início não muda nunca (DEBUG (0): SORVEDOURO:).
Além desta linha, uma outra linha, dentre muitas me interessa:
DEBUG (4): ENVIAR_PKT_DADOS: destino 27 slot 3 [cont 0] no tempo=4095.
O que eu preciso fazer: Ler o arquivo de log, fazendo um split de cada linha e procurando pela linha que case exatamente com DEBUG (0): SORVEDOURO:.
Assim que encontrar, preciso armazenar 3 variáveis: origem, tempo_final e controle.
Por exemplo:
DEBUG (0): SORVEDOURO: [trans=6] [origem=24] [slot 0] [cont-0] [time=5005].
origem=24, controle=0 e tempo_final=5005
A partir daí, preciso fazer uma nova procura em todo o log pela linha que case com a origem: DEBUG (origem): ENVIAR_PKT_DADOS: destino 27 slot 3 [cont 0] no tempo=4095. (a origem é 24, vindo da primeira pesquisa). Assim que encontrar, preciso armazenar 2 variáveis:tempo_inicial e controle_no.
Por exemplo:
DEBUG (24): ENVIAR_PKT_DADOS: destino 27 slot 3 [cont 0] no tempo=4095.
tempo_inicial=4095 e controle_no=0
Após isso, preciso verificar se os dois controles são iguais
if (controle==contrloe_no):Caso afirmativo, uma variável tempo = tempo_final - tempo_inicial.
O ideal seria gravar esses valores em um arquivo txt, porém como não sei fazer, iria imprimir na tela mesmo e o famoso ctrl+c / ctrl+v para ajudar.
Até agora consegui fazer está parte, como muitos erros:
Um detalhe final é que minha origem pode ser desde 1 até 31, como o tempo é variável de 5000 em 5000, o que torna mais difícil para mim, a pesquisa. Pensei até em tentar algo como find("origem=") e retirar os caracteres após isso, mais não tenho ideia se isso funciona.
LOG_FILE = bd-0105.log
f = open(LOG_FILE, "r")
lines = f.readlines()
for line in lines:
s = line.split()
if (len(s) > 0):
if s[0:22] == "DEBUG (0): SORVEDOURO": #DEBUG (0): SORVEDOURO: [trans=6] [origem=24] [slot 0] [cont-0] [time=5005]. (LINHA DO LOG_FILE)
origem= int(s[42:43]) #queria pegar o valor 24 da origem=24
controle= int(s[60]) # queria pegar o valor 0 de cont-0
tempo_final= int(s[69:72]) #queria pegar o valor 5005 do time=5005
for linha in linhas:
z = linha.split()
if (len(z) > 0):
if z[0:28] == "DEBUG (origem): ENVIAR_PKT_DADOS:": #DEBUG (24): ENVIAR_PKT_DADOS: destino 27 slot 3 [cont 0] no tempo=4095. (LINHA DO LOG_FILE)
tempo_inicial= s[66:69] #queria pegar o valor 4095 do tempo=5016
controle_no= int(s[54]) # queria pegar o valor 0 de [cont 0]
if (controle == controle_no): #aqui verifico se as duas variáveis de controle são iguais
tempo=tempo_final-tempo_inicial #aqui faço a diferença de tempo
print(tempo)
#aqui entraria a segunda parte, onde gravaria em um arquivo txt o valor de cada tempo
#tempo1
#tempo2
#....