Filtra palavras em um arquivo

1. Filtra palavras em um arquivo

João Lamartin
jlamartin

(usa Fedora)

Enviado em 21/08/2010 - 20:51h

Ola Galera!
Tenho um arquivo de log e tenho que filtrar apenas a linha em que aparece uma determinada palavra e após concatenar as variáveis que desejo, ex:
Date=20101020|PNAM=Teste|PNUM=250|CCOD=0|RECI=2|ADFT=Null|MSG=Teste|LIP=192.122.4.256|...

As linhas são muito extensas e com muitos parâmetros. Eu quero selecionar apenas as linhas que contém o parâmetro PNUM e gravar um arquivo com os parâmetros que eu quiser.

Utilizei o script abaixo porém só funciona com um número limitado de comandos fgrep e gostaria da ajuda de vocês para poder incluir mais parâmetros ou lógica para melhoria.

Se possível também checar o arquivo de log sempre que o mesmo seja acrescentado e extrair os parâmetros online.
Obrigado

#!/usr/bin/ksh
fgrep PNUM /teste/arq.log | fgrep CCOD | fgrep MSG | sed 's/|/;/g' | while read linha
do
IFS_SV=$IFS
IFS=";"
for i in `echo "$linha" | sed 's/=/="/g' | sed 's/;/";/g' | sed 's/$/"/g'`
do
#echo $i
eval $i
done
IFS=$IFS_SV
echo "PNUM=$PNUM CODE=$CCOD MSG=$MSG"
done




  


2. Re: Filtra palavras em um arquivo

Marcos Paulo Ferreira
Daemonio

(usa Slackware)

Enviado em 25/08/2010 - 21:22h

Você pode pesquisar tudo de uma vez, utilizando somente um grep:

$ grep 'PNUM.*CCOD.*MSG' /teste/arq.log

Procura por PNUM e CCOD e MSG (nessa ordem) em cada linha do arquivo arq.log

E, dá pra retirar o loop for do script, já que o eval consegue
atribuir mais de uma variável por linha. Ficaria algo como:

$ eval `echo $linha | sed -r 's/=([^|]*)[|]?/="\1";/g'`

Agora...

"Se possível também checar o arquivo de log sempre que o mesmo seja acrescentado e extrair os parâmetros online."

Ficou um pouco "hard" de entender. Dá pra explicar melhor?

Abraços
t+






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts