arsaraiva
(usa Ubuntu)
Enviado em 05/07/2017 - 13:42h
Olá Marcelo, tudo bom?
Olha só o que aconteceu: durante a execução da simulação, ele era chamado e criava os arquivos ARQ_SORVE, ARQ_PKT_DADOS e LATENCIA. Bem, eu não reparei na hora, porém diversas rodadas apresentava erro de indexação e parava a criação do arquivo de LATENCIA.
Agora eu tenho os arquivos ARQ_SORVE_xxx e ARQ_PKT_DADOS_xxx e preciso varrer os dois procurando os nós e calculando o tempo. Só para lembrar:
Tenho dois arquivos: ARQ_PKT_DADOS_grid_*.log e ARQ_SORVE_grid_*.log e em um deles tenho o tempo em que o sorvedouro recebeu o pacote e no outro o envio pelo nó do pacote.
Por exemplo:
ARQ_SORVE
65620419488 0 12 12 579 0 6370 //nó que enviou o pacote e o número de controle
127828030169 0 8 16 1158 0 12740 //nó que enviou o pacote e o número de controle
127846409021 0 3 3 1158 1 12741
127865729904 0 7 7 1158 1 12743
....
ARQ_PKT_DADOS
65260043063 30 0 579 0 6633
65275141913 13 0 579 0 6402
65292240729 33 0 579 0 6611
65298153863 34 0 579 0 6446
65303209818 17 0 579 0 6270
65308498919 21 0 579 0 6369
65405166883 6 0 579 0 6380
65407550568 16 0 579 0 6402 //nó transmissor e o controle
65409444195 24 0 579 0 6677
65411232994 23 0 579 0 6479
65478403883 1 0 579 0 6479
65484767022 12 0 579 0 6490 //nó transmissor e o controle
...
O que eu preciso é fazer justamente essa comparação e depois subtrair os tempos. Verifico o ARQ_SORVE linha a linha, peguei a primeira linha, carrego 3 variáveis (tempo, nó e cont, por exemplo) com o tempo (este valor no início da linha (65620419488), o valor do nó que enviou(12) e o número de controle(0) (estes exemplos são da primeira linha do arquivo ARQ_SORVE. Com esses dados, abro o ARQ_PKT_DADOS e vou varrendo linha por linha até achar o valor do nó (12) e o controle corretos(0) (só existe uma entrada e nunca se repete), achando eu carrego o valor do tempo em uma variável qualquer e faço a subtração do tempo armazenado na vaiável tempo (do ARQ_SORVE) com este tempo do ARQ_PKT_DADOS e sai só com o resultado em um arquivo latência.txt (por exemplo).
Olhando as linhas coloridas, a subtração é:
65620419488 – 65484767022 = 135652466
127828030169 – 65407550568 = 6242047960
O script original é:
#!/bin/bash
CVM='\x1B[0;38;5;196m'
FC='\x1B[m'
ARQ_LOG=$1
PEGA_ARQ() {
ARQ_LOG=$1
TSTAMP=$(basename "$ARQ_LOG"|cut -d"." -f1)
ARQ_SOR="ARQ_SORVE_${TSTAMP}";>output/$ARQ_SOR
ARQ_PKT="ARQ_PKT_DADOS_${TSTAMP}";>output/$ARQ_PKT
ARQ_SAI="LATENCIA_${TSTAMP}";>output/$ARQ_SAI
PROCESSA
}
PROCESSA() {
grep -E -B1 'SORVEDOURO:' $ARQ_LOG |sed '/--/d'|sed 'N;s/\n/ /'|sed -r 's/[[:alpha:]]|[[:punct:]]//g;s/[ ]+/ /g;s/^ //' >> output/$ARQ_SOR
grep -E -B2 'ENVIAR_PKT_DADOS:' $ARQ_LOG|sed '/SLOT_ATIVO:\|--/d'|sed 'N;s/\n/ /'|sed -r 's/[[:alpha:]]|[[:punct:]]//g;s/[ ]+/ /g;s/^ //' >> output/$ARQ_PKT
while IFS=" " read -r inic debug trans orig slot cont time;do
DADOS_PKT=$(awk '{if($2=="'$orig'" && $5=="'$cont'") print $0}' output/$ARQ_PKT)
if ((${#DADOS_PKT} > 0));then
fina=$(cut -d" " -f1 <<< "$DADOS_PKT")
echo "$orig $cont $((inic-fina))" >> output/$ARQ_SAI
else
echo "$orig $cont 0 (não foi encontrado)" >> output/$ARQ_SAI
fi
done<output/$ARQ_SOR
}
PEGA_ARQ $1
Mudei para tentar fazer funcionar por chamada, porém não funcionou:
#!/bin/bash
CVM='\x1B[0;38;5;196m'
FC='\x1B[m'
PEGA_ARQ() {
ARQ_SOR="ARQ_SORVE_${TSTAMP}";>output/$ARQ_SOR
ARQ_PKT="ARQ_PKT_DADOS_${TSTAMP}";>output/$ARQ_PKT
ARQ_SAI="LATENCIA_${TSTAMP}";>output/$ARQ_SAI
PROCESSA
}
PROCESSA() {
while IFS=" " read -r inic debug trans orig slot cont time;do
DADOS_PKT=$(awk '{if($2=="'$orig'" && $5=="'$cont'") print $0}' output/$ARQ_PKT)
if ((${#DADOS_PKT} > 0));then
fina=$(cut -d" " -f1 <<< "$DADOS_PKT")
echo "$orig $cont $((inic-fina))" >> output/$ARQ_SAI
else
echo "$orig $cont 0 (não foi encontrado)" >> output/$ARQ_SAI
fi
done<output/$ARQ_SOR
}
PEGA_ARQ
Os arquivos tem sempre o mesmo padrão de saída:
ARQ_SORVE_bd-030617-191958
ARQ_PKT_DADOS_bd-030617-191958
Então acho que errei aí, pois tinha que fazer uma Verificação se o final do arquivo (bd-030617-191958) são iguais para os dois.
Tentei fazer chamando arquivo por arquivo dando o nome completo, mais também não funcionou.
Poderia me ajudar a ajustar este script? Se for difícil verificar os nomes dos arquivos, eu faço manualmente, pois preciso muito é refazer os arquivos de latência.
Mais uma vez obrigado.
Abçs