shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Tratar texto.


From: jimmy
Subject: Re: [shell-script] Tratar texto.
Date: Wed, 5 Nov 2008 11:11:31 -0200
User-agent: Mutt/1.4.2.3i

On Wed, Nov 05, 2008 at 04:16:26AM -0800, Edmilson Menezes wrote:
> Bom dia pessoal, tenho o seguinte texto:
>  
> mestre01 SERVIDOR #5508308AAAAAAABH CAMPO1 CAMPO2 CAMPO3
> mestre01 NOME01 ERRO        CAMPO1 CAMPO2 CAMPO3
> mestre01 NOME02 ERRO        00 CAMPO1 CAMPO2 CAMPO3
> mestre01 SERVIDOR01 #QUALQUER        CAMPO1 CAMPO2 CAMPO3
> mestre01 >>ESTADO run NOME1 ERRO 00 CAMPO1 CAMPO2 CAMPO3
> mestre02 SERVIDOR13 #COISA CAMPO1 CAMPO2 CAMPO3
> mestre02 >>ESTADO run NOME1 ERRO 00 CAMPO1 CAMPO2 CAMPO3
> mestre02 SERVIDOR37 #QUALQUER CAMPO1 CAMPO2 CAMPO3
> mestre02 >>ESTADO run NOME9 ERRO CAMPO1 CAMPO2 CAMPO3
> mestre02 SERVIDOR41 #5508308AAAAAAABF CAMPO1 CAMPO2 CAMPO3
> mestre02 NOME7 ERRO       CAMPO1 CAMPO2 CAMPO3
>  
>  
> Creio que o texto esta desconfigurado, por favor verifiquem aqui:
>  
> http://pastebin.com/m6dc8f790 , acho que postei corretamente.
>  
> Então, eu gostaria que o segundo campo do texto que contem o nome de um 
> servidor ficasse junto com o processo que o mesmo executa que é a linha que 
> esta abaixo, e assim por diante com os outros servidores, eu até consegui 
> colocar o nome do mesmo servidor para todas as linhas, mais preciso colocar o 
> servidor e seu processo os demais campos são diferentes e variam por linha, 
> algumas linhas estão com 9 campos e podem ir até 15 campos. Pessoal não 
> coloquei o que fiz porque não sei por onde começar sei até como ler campo a 
> campo mais fazer com que fique o servidor com o processo não. Obrigado.
>  
> 
> 
> ------------------------------------

se entendi o que você quer algum dos três scripts abaixo resolve o seu
problema:

$ awk '{server=($0 ~ /SERVIDOR/)?$2:server;$1=($1" "server); print}' texto

$ sed '/SERVIDOR/{p;s/^[^ ]\+ \([^ ]\+\) .*$/\1/;h;d};G;s/^\([^ ]\+\) 
\([^\n]\+\)\n\(.*\)/\1 \3 \2/' texto

$ while :; do read c1 c2 last || break; [[ $c2 =~ SERVIDOR ]] && server=" $c2"; 
echo -e "$c1$server $c2$last"; done < texto

mas fica o problema de determinar qual a expressão que ocorre na linha
que contém o nome do servidor que não ocorre nas demais, estou assumindo
a palavra "SERVIDOR" mas deveria ser a expressão.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]