Ajuda com SED [RESOLVIDO]

1. Ajuda com SED [RESOLVIDO]

Antonio Cesario
zurczurc

(usa Debian)

Enviado em 25/06/2017 - 10:44h

Estou precisando de uma ajuda com o comando SED, tenho um conhecimento médio da sua utilização.
Tenho um arquivo com esse conteúdo :

Novo Teste
143
182
234
56
1496253767
error ^k pdm anium n
Novo Teste
122
164
19535
56487
1496253767
Novo Teste
143
182
234
56
1496252573
Novo Teste
143
182
234
56
1496252573


Nesse arquivo eu preciso contar a quantidade de vezes que aparece a palavra Novo Teste, mas tem um problema.
A cada 5 linhas depois da palavra Novo Teste tem um numero 1496252573 que muda, esse numero é a data e a hora que o teste foi realizado no formato de ComputerTime. Quando aparece a palavra Novo Teste e na quinta linha esse numero é igual ou tem um diferença inferior a 10 minutos isso quer dizer que o teste falhou e um novo teste recomeça. Então eu preciso contar apenas os teste que deram certos (Novo Teste) mas apenas se o ComputerTime (1496252573) for maior que 10 minutos e esse ComputerTime sempre aparece na 5 linha do arquivo depois da palavra Novo Teste.

Complicado não ? !!!!

Eu agradeceria muito se algum colega pudesse me ajudar !!! Pensei de algum jeito pegar essa quinta linha e anexar na linha da palavra Novo Teste depois fazer algum tipo de sort para eliminar todas as linhas com esse tempo igual, mas como comparar o tempo para ser maior que 10 minutos .......

Como anexar a quinta linha depois da palavra Novo Teste na linha do Novo teste ?

Estou perdido.

Muito Muito Obrigado

Cesario





  


2. MELHOR RESPOSTA

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 26/06/2017 - 11:17h

zurczurc escreveu:

Cara deu ultra certo. ajudou muito mesmo.
Quero agradecer a todos .
Obrigado
Cesario


Por nada Cesario!
Bom que foi resolvido.
Se a minha resposta te ajudou, marque-a como "A MELHOR",
dessa forma sou pontuado, o que incentiva a continuar colaborando...
Abç.:
Marcelo Oliver


3. Re: Ajuda com SED [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 25/06/2017 - 11:10h

No exemplo que você mostrou aparece "error" quando o teste falha, certo!? Então, em vez de calcular os tempos basta pegar quantas vezes aparecem "error" e subtrair com a quantidade total de "Novo teste", ficando assim:
expr $(grep -c Novo arquivo.txt) - $(grep -c error arquivo.txt) 

Adapte o comando a sua necessidade e veja se resolve o problema!


4. AJuda com SED

Antonio Cesario
zurczurc

(usa Debian)

Enviado em 25/06/2017 - 11:13h

Mas muitas vezes o erro não aparece so o tempo que é igual ou inferior ao tempo de um teste completo.


Obrigado

Cesario


5. Ajuda com SED

Antonio Cesario
zurczurc

(usa Debian)

Enviado em 25/06/2017 - 11:16h

Esse é um fragmento do arquivo original


498287207 1 1 Sat Jun 24 06:53:27 2017 11003 4
TTTTM1 dcserver
dcsping.c 138
^MFailure to get DCM event: lost transport connection (114)
^MEN 161
^M^MSR 118
1498288402 0 1 Sat Jun 24 07:13:22 2017 2218714 4
TTTTM1 scn
SrxParamIF.m 284
^MNew Test Started
^MEN 118
^M^MSR 118
1498288404 0 1 Sat Jun 24 07:13:24 2017 2218714 4
TTTTM1 scn
SrxParamIF.m 284
^MNew Test Started
^MEN 118
^M^MSR 164
1498288404 1 1 Sat Jun 24 07:13:24 2017 2219940 1


A palavra é New Test Started .


6. Re: Ajuda com SED

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 25/06/2017 - 11:33h

zurczurc escreveu:

Estou precisando de uma ajuda com o comando SED, tenho um conhecimento médio da sua utilização.
Tenho um arquivo com esse conteúdo :

Novo Teste
143
182
234
56
1496253767
error ^k pdm anium n
Novo Teste
122
164
19535
56487
1496253767
Novo Teste
143
182
234
56
1496252573
Novo Teste
143
182
234
56
1496252573


Nesse arquivo eu preciso contar a quantidade de vezes que aparece a palavra Novo Teste, mas tem um problema.
A cada 5 linhas depois da palavra Novo Teste tem um numero 1496252573 que muda, esse numero é a data e a hora que o teste foi realizado no formato de ComputerTime. Quando aparece a palavra Novo Teste e na quinta linha esse numero é igual ou tem um diferença inferior a 10 minutos isso quer dizer que o teste falhou e um novo teste recomeça. Então eu preciso contar apenas os teste que deram certos (Novo Teste) mas apenas se o ComputerTime (1496252573) for maior que 10 minutos e esse ComputerTime sempre aparece na 5 linha do arquivo depois da palavra Novo Teste.

Complicado não ? !!!!

Eu agradeceria muito se algum colega pudesse me ajudar !!! Pensei de algum jeito pegar essa quinta linha e anexar na linha da palavra Novo Teste depois fazer algum tipo de sort para eliminar todas as linhas com esse tempo igual, mas como comparar o tempo para ser maior que 10 minutos .......

Como anexar a quinta linha depois da palavra Novo Teste na linha do Novo teste ?

Estou perdido.

Muito Muito Obrigado
Cesario


Bom dia Antonio.

Segue uma ajuda . . .
NR6=$(awk 'END{print NR-6}' testes)
for i in $(seq 1 $NR);do ((i%6==0)) && { TS1=$(sed -n "${i}p" testes);TS2=$(sed -n "$((i+6))p" testes);RES=$((TS1-TS2));((RES<600)) && STT="ERRO" || STT="CERTO"; echo "$TS1 - $TS2 = $RES [$STT]" ; }; done
1496253767 - 1496253767 = 0 [ERRO]
1496253767 - 1496252573 = 1194 [CERTO]
1496252573 - 1496252573 = 0 [ERRO]


Att.:
Marcelo Oliver



7. Ajuda SED

Antonio Cesario
zurczurc

(usa Debian)

Enviado em 25/06/2017 - 17:21h

Não entendi muito bem o funcionamento dessa rotina.
O Arquivo original de saida dos logs é esse

^MThis system is overdue for Planned Maintenance. Please contact your Service Provider.
^MEN 190
^M^MSR 118
1496253765 0 1 Wed May 31 18:02:45 2017 2218714 4
EMMD scn
SrxParamIF.m 284
^MNew Test
^MEN 118
^M^MSR 118
1496253767 0 1 Wed May 31 18:02:47 2017 2218714 4
EMMD scn
SrxParamIF.m 284
^MNew Test
^MEN 118
^M^MSR 164
1496253767 1 1 Wed May 31 18:02:47 2017 2219940 1
EMMD scn
WLscanCallbacks.c 3356
^MPPS :: Action Item : MRABD not Mapped, Please Configure
^MEN 164
^M^MSR 174
1496254089 0 1 Wed May 31 18:08:09 2017 2218716 4
EMMD scn
MsaScanMgr.m 4639
^MDoor sensor is not working. Please contact your service representative.
^MEN 174
^M^MSR 360
1496255127 0 1 Wed May 31 18:25:27 2017 2224725 2

EMMD scn
../msgFile.c 315
^MThe message key 0 was not found.
^MEN 128
^M^MSR 129
1496255541 1 1 Wed May 31 18:32:21 2017 0 4
EMMD scn
SvatSync.c 615
^MErmes error,
key: 0,
error: 4009.
^MEN 129
^M^MSR 189
1496255889 0 1 Wed May 31 18:38:09 2017 2219875 1
EMMD scn
SrxRespRate.m 265
^MThis system is overdue for Planned Maintenance. Please contact your Service Provider.
^MEN 190
^M^MSR 118
1496253765 0 1 Wed May 31 18:02:45 2017 2218714 4
EMMD scn
SrxParamIF.m 284
^MNew Test
^MEN 118
^M^MSR 118
1496253767 0 1 Wed May 31 18:02:47 2017 2218714 4
EMMD scn
SrxParamIF.m 284
^MNew Test


A unica constante é que a data em formato Computer Time sempre aparece na quarta linha. O resto é uma zona danada.

Mesmo assim muito obrigado a todos pela ajuda.

Cesario


8. Re: Ajuda com SED [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 25/06/2017 - 19:30h

zurczurc escreveu:

Não entendi muito bem o funcionamento dessa rotina.
O Arquivo original de saida dos logs é esse

^MThis system is overdue for Planned Maintenance. Please contact your Service Provider.
^MEN 190
^M^MSR 118
1496253765 0 1 Wed May 31 18:02:45 2017 2218714 4
EMMD scn
SrxParamIF.m 284
^MNew Test
^MEN 118
^M^MSR 118
1496253767 0 1 Wed May 31 18:02:47 2017 2218714 4
EMMD scn
SrxParamIF.m 284
^MNew Test
^MEN 118
^M^MSR 164
1496253767 1 1 Wed May 31 18:02:47 2017 2219940 1
EMMD scn
WLscanCallbacks.c 3356
^MPPS :: Action Item : MRABD not Mapped, Please Configure
^MEN 164
^M^MSR 174
1496254089 0 1 Wed May 31 18:08:09 2017 2218716 4
EMMD scn
MsaScanMgr.m 4639
^MDoor sensor is not working. Please contact your service representative.
^MEN 174
^M^MSR 360
1496255127 0 1 Wed May 31 18:25:27 2017 2224725 2

EMMD scn
../msgFile.c 315
^MThe message key 0 was not found.
^MEN 128
^M^MSR 129
1496255541 1 1 Wed May 31 18:32:21 2017 0 4
EMMD scn
SvatSync.c 615
^MErmes error,
key: 0,
error: 4009.
^MEN 129
^M^MSR 189
1496255889 0 1 Wed May 31 18:38:09 2017 2219875 1
EMMD scn
SrxRespRate.m 265
^MThis system is overdue for Planned Maintenance. Please contact your Service Provider.
^MEN 190
^M^MSR 118
1496253765 0 1 Wed May 31 18:02:45 2017 2218714 4
EMMD scn
SrxParamIF.m 284
^MNew Test
^MEN 118
^M^MSR 118
1496253767 0 1 Wed May 31 18:02:47 2017 2218714 4
EMMD scn
SrxParamIF.m 284
^MNew Test


A unica constante é que a data em formato Computer Time sempre aparece na quarta linha. O resto é uma zona danada.

Mesmo assim muito obrigado a todos pela ajuda.

Cesario


Boa noite Cesario.
Montei o script com base no conteúdo postado (1ª postagem).
Segue com a postagem atual:
egrep -o '([0-9]{10} )' Novo|sort -n|uniq > novo.txt #Pega da postagem atual e gera um ARQ somente com o Computer Time, em ordem crescente, exclui os repetidos.
NR1=$(awk 'END{print NR-1}' novo.txt) # Conta o Nº de linhas e subtrai 1
for i in $(seq 1 $NR1);do
TS1=$(sed -n "${i}p" novo.txt);TS2=$(sed -n "$((i+1))p" novo.txt);RES=$((TS2-TS1));((RES<600)) && STT="ERRO" || STT="CERTO"; echo "$TS2 - $TS1 = $RES [$STT]"; done

Como funciona:
Faz um laço de 1 a "Nº de Linhas - 1"
Gera a VAR TS1 (linha = $i)
Gera a VAR TS2 (linha = $i+1)
Gera a VAR RES com o resultado da subtração. Subtrai a linha 2 pela 1, a 3 pela 2, a 4 pela 3 . . .
Se $RES é menor que "600" (10 minutos), STT=ERRO, Senao STT=CERTO

Marcelo Oliver



9. AJuda com SED

Antonio Cesario
zurczurc

(usa Debian)

Enviado em 25/06/2017 - 20:27h

Rodei o script o arquivo do meu log renomeie para novo.txt mas não obtive nenhum resultado válido, meu arquivo de log tem 20 megas. Será que isso é um problema ?
Lembrando que tenho que contar quantas vezes parece a palavra New Test , dentro daquela regra se o computerTime é igual ou menor que 10 minutos não deve ser contado. O computertime que indica o começo do teste (New Test) aparece sempre na quarta linha.

Agradeço muito Marcelo.


Cesario


10. Re: Ajuda com SED [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 25/06/2017 - 22:23h

zurczurc escreveu:

Rodei o script o arquivo do meu log renomeie para novo.txt mas não obtive nenhum resultado válido, meu arquivo de log tem 20 megas. Será que isso é um problema ?
Lembrando que tenho que contar quantas vezes parece a palavra New Test , dentro daquela regra se o computerTime é igual ou menor que 10 minutos não deve ser contado. O computertime que indica o começo do teste (New Test) aparece sempre na quarta linha.

Agradeço muito Marcelo.


Cesario


Boa noite Cesario.
Renomeie o arquivo de log para Novo, ou altere a 1ª linha, onde esta Novo, coloque o "NOMEDOARQUIVODELOG"
novo.txt, e gerado pela 1ª linha
egrep -o '([0-9]{10} )' "NOMEDOARQUIVODELOG"|sort -n|uniq > novo.txt
O computertime que indica o começo do teste (New Test) aparece sempre na quarta linha.
A SUBTRAÇÃO deve ser feita sempre em relação a linha 4?
Se for isso, requer alterações . . . . .
Segue alterado:
NR=$(awk 'END{print NR}' NOVO.txt)
TS1=$(sed -n "1p" NOVO.txt)
for i in $(seq 1 $NR);do
TS2=$(sed -n "${i}p" NOVO.txt);RES=$((TS2-TS1))
((RES<=600)) && STT="ERRO" || STT="CERTO"; echo "$TS2 - $TS1 = $RES [$STT]"
done

1496253765 - 1496253765 = 0 [ERRO]
1496253767 - 1496253765 = 2 [ERRO]
1496254089 - 1496253765 = 324 [ERRO]
1496255127 - 1496253765 = 1362 [CERTO]
1496255541 - 1496253765 = 1776 [CERTO]
1496255889 - 1496253765 = 2124 [CERTO]

Att.:
Marcelo


11. Ajuda com SED

Antonio Cesario
zurczurc

(usa Debian)

Enviado em 25/06/2017 - 23:38h

Cara deu ultra certo. ajudou muito mesmo.

Quero agradecer a todos .

Obrigado

Cesario






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts