Ler linha de arquivo e tratar condição [RESOLVIDO]

1. Ler linha de arquivo e tratar condição [RESOLVIDO]

guilherme
guilhermeof

(usa Outra)

Enviado em 19/01/2016 - 17:59h

Olá pessoal!
Estou com um "pequeno" problema...
Preciso ler um arquivo de log e encontrar a palavra 'Resultado' e logo verificar o valor que segue. Este arquivo é gerado diariamente e sofre algumas mudanças, mas sempre terá a palavra 'Resultado:' e logo após o valor. Precisarei tratar se este valor for maior que 0.

Exemplo do arquivo ('Arquivo.log'):
aaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaa
aa aaaaaa
aaaaaaaaaaaa
aaaaaa a
Resultado: 0 -> Após o resultado, há dois pontos (':') e há espaços em branco, mas ficam na mesma linha do arquivo...
aaaaaaaaaaaaaa
aaaa aaaaaa

Tentei criar o shell script, sei que posso usar o while pra percorrer as linhas, porém não sei como pegar a linha com o 'Resultado' e o valor pra verificar se é maior que 0. Como poderia fazer??




  


2. MELHOR RESPOSTA

Wellingthon Dias Queiroz - @tonyhts
tonyhts

(usa Arch Linux)

Enviado em 20/01/2016 - 17:27h

Entendido!

Tente assim:


arq='logfile.log'

for i in $(egrep '[rR]esult' $arq | awk -F":" '{print $2}')
do
if [ $i -gt 0 ]
then
echo " Valor MAIOR QUE 0 ENCONTRADO"
else
echo "Valor MENOR que 0 "
fi
done



abs
---
Eu Acredito, que ás vezes são as pessoas que ninguém espera nada que fazem as coisas que ninguém consegue imaginar.

--- Mestre dos Mestres - Alan Turing ---

3. Re: Ler linha de arquivo e tratar condição [RESOLVIDO]

Renan Arantes
R3nan

(usa Debian)

Enviado em 19/01/2016 - 18:13h

segue o script, se te ajudar marque o topico como resolvido e escolha a melhor resposta


#!/bin/bash

valor=$(cat arq1.txt | grep Resultado | awk '{print $2}')

if [ $valor -gt 0 ]; then
echo "e maior que zero"
else
echo "e menor ou igual a zero"
fi




4. RES: Ler linha de arquivo e tratar condição

marcio mendes mendes
conectadohost

(usa XUbuntu)

Enviado em 19/01/2016 - 18:52h

R3nan escreveu:

segue o script, se te ajudar marque o topico como resolvido e escolha a melhor resposta


#!/bin/bash

valor=$(cat arq1.txt | grep Resultado | awk '{print $2}')

if [ $valor -gt 0 ]; then
echo "e maior que zero"
else
echo "e menor ou igual a zero"
fi



Olá, posso estar enganado mas acho que dessa forma será exibido todas as linhas que tenha a palavra resultado
e não somente a linha que o valor do resultado seja maior que zero, pois esta sendo pego o Resultado com o grep e não o valor.

acho que o ideal seria um delimitador com o sed.

---> A arte de programar consiste na arte de organizar e dominar a complexidade.
---> Dijkstra <---


5. Re: Ler linha de arquivo e tratar condição [RESOLVIDO]

Renan Arantes
R3nan

(usa Debian)

Enviado em 19/01/2016 - 19:02h

pelo que eu intendi na pergunta existe apenas uma palavra resultado no arquivo todo.... agora fiquei na duvida, vamos ver o que o autor resolve...


6. Ler linha de arquivo e tratar condição

Perfil removido
removido

(usa Nenhuma)

Enviado em 19/01/2016 - 20:09h

R3nan escreveu:

pelo que eu intendi na pergunta existe apenas uma palavra resultado no arquivo todo.... agora fiquei na duvida, vamos ver o que o autor resolve...


Eu também entendi isso! sua resposta foi boa só para complementar tem o "awk", "sed", e o "cut" que eu uso em certas oportunidades mas isso vai da preferencia da pessoa.



7. Re: Ler linha de arquivo e tratar condição [RESOLVIDO]

Renan Arantes
R3nan

(usa Debian)

Enviado em 19/01/2016 - 20:57h

parazite10195392 escreveu:

R3nan escreveu:

pelo que eu intendi na pergunta existe apenas uma palavra resultado no arquivo todo.... agora fiquei na duvida, vamos ver o que o autor resolve...


Eu também entendi isso! sua resposta foi boa só para complementar tem o "awk", "sed", e o "cut" que eu uso em certas oportunidades mas isso vai da preferencia da pessoa.


rapaz preciso tirar um tempo pra estudar o sed, eu não consigo enfiar ele na minha cabeça...



8. Re: Ler linha de arquivo e tratar condição

Wellingthon Dias Queiroz - @tonyhts
tonyhts

(usa Arch Linux)

Enviado em 19/01/2016 - 22:25h

Olá,

Acho que o amigo Renan interpretou certo, maaaas se quiser substituir o valor do resultado (caso ele for maior que zero) existindo 1 ou mais Resultados, segue:



#!/bin/bash

arq='arq1.txt'

for i in $(grep 'Resultado' $arq | awk '{print $2}')
do
if [ $i -gt 0 ]; then
echo "Alterando o valor do Resultado para 5"
sed -i "/Resultado/ s/$i/5/" $arq
else
echo "Nehuma Ação"
fi
done



Abs

---
Eu Acredito, que ás vezes são as pessoas que ninguém espera nada que fazem as coisas que ninguém consegue imaginar.

--- Mestre dos Mestres - Alan Turing ---


9. Re: Ler linha de arquivo e tratar condição [RESOLVIDO]

guilherme
guilhermeof

(usa Outra)

Enviado em 20/01/2016 - 10:57h

Pessoal,
Muito obrigado pela ajuda, porém não funciona quando o resultado é maior que 0. Quando é 0 funciona normalmente (ou só esta entrando no else "VALOR MENOR OU IGUAL A 0!")
Esqueci de especificar que pode existir sim mais de uma vez a palavra resultado, porém só uma linha do arquivo contém o que eu realmente busco, que é 'resultado: x' , sendo x o valor.

Configurei conforme abaixo:

#!/bin/bash

arq='logfile.log'

for i in $(grep 'resultado' $arq | awk '{print $2}')
do
if [ $i -gt 0 ]; then
echo "VALOR MAIOR QUE 0!!!"
else
echo "VALOR MENOR OU IGUAL A 0!"
fi
done

O que pode estar de errado?
Obrigado a todos!!

Abs


10. RES: Ler linha de arquivo e tratar condição

marcio mendes mendes
conectadohost

(usa XUbuntu)

Enviado em 20/01/2016 - 11:09h

Olá,
justamente o que eu havia dito, pois o script não está pegando pelo valor e sim pela palavra Resultado.
eu só não consegui lhe ajudar no script por que no meu entendimento teria que utilizar o sed com delimitador e não manjo muito de certas funções avançadas dele, quem manja é o @tonyhts


---> A arte de programar consiste na arte de organizar e dominar a complexidade.
---> Dijkstra <---


11. Re: Ler linha de arquivo e tratar condição [RESOLVIDO]

Wellingthon Dias Queiroz - @tonyhts
tonyhts

(usa Arch Linux)

Enviado em 20/01/2016 - 13:35h

Olá,

Acho que não rolou o primeiro script porque resultado esta escrito com R minusculo e no seu exepo o R é maiúsculo. Basta adicionar uma ER para resolver isso, assim ele trata com r ou R.

Mas voltando a questão :

Então vc não precisa testar se o valor do resultado é maior que zero, e sim testar se o valor é igual a X, certo ? se sim, segue:

#!/bin/bash

arq='logfile.log'

x=5
for i in $(egrep '[rR]esultado' $arq | awk '{print $2}')
do
if [ $i == $x ]
then
echo "VALOR $x econtrado !!!"
else
echo "VALOR $x Não encontrado"
fi
done



abs
---
Eu Acredito, que ás vezes são as pessoas que ninguém espera nada que fazem as coisas que ninguém consegue imaginar.

--- Mestre dos Mestres - Alan Turing ---


12. Re: Ler linha de arquivo e tratar condição [RESOLVIDO]

guilherme
guilhermeof

(usa Outra)

Enviado em 20/01/2016 - 17:01h

@tonyhts

Não foi pela questão do maiúsculo ou minúsculo... tentei das duas maneiras.
Na verdade eu quero testar se é maior que zero sim (coloquei x, pois há variação deste valor, podendo ir de 0 ao "infinito").

O exemplo real de arquivo esta assim:

0 Rows not loaded because all fields were null.
Table Teste:
0 Rows successfully loaded.
0 Rows not loaded due to data errors.
10 Rows not loaded because all WHEN clauses were failed.
0 Rows not loaded because all fields were null.


Space allocated for bind array: 255684 bytes(66 rows)
Read buffer bytes: 1048576

Total logical records skipped: 0
Total logical records read: 10
Total logical records rejected: 1
Total logical result: 5 -----> esta a linha que busco, preciso verificar o result, que nesse caso é igual a 5...

Obviamente que no script eu utilizei result, ao invés de resultado, inclusive tentei result, Total logical result:, logical result, result:, Result e nada, nenhuma destas opções na configuração funcionaram...
Continuarei testando até encontrar o erro...

Obrigado pela ajuda pessoal!!
Abs




01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts