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

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

Re: [shell-script] JUSTIFICAR


From: Rodrigo Boechat
Subject: Re: [shell-script] JUSTIFICAR
Date: Fri, 11 Nov 2011 21:43:17 -0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:7.0.1) Gecko/20111001 Thunderbird/7.0.1

Como vão?

Eu consegui assim:
sed -e 's/\(^[a-zA-Z0-9-]*\)[| 
]\{0,3\}\([0-9]\{5\}\)[|]\([0-9]*\)[|]\([0-9]*\)[|]\([0-9]*\)[|]\([a-zA-Z]\{0,2\}\)/\1\t\|\2\t\|\3\t\|\4\t\|\5\t\|--\6/'
 
arquivo_texto.txt

Bem. O meu resultado ficou diferente do Jimmy. Veja se te ajuda.
Talvez seja possível melhorar esse sed.
:)

Espero ter ajudado.
Rodrigo Boechat


Em 11-11-2011 18:04, jimmy escreveu:
>
> Saudações Willian,
>
> On Fri, Nov 11, 2011 at 05:45:54PM -0000, williamalves1975br wrote:
> > Depois de um tempo, recorro a lista pedindo ajuda.
> >
> > Tenho um testo que preciso justificar, fiz vários testes com o 
> printf, mas não
> > foi satisfatório.
> >
> > cat arquivo_texto.txt | while read LIN; do
> > printf "%1s%12s%1s%1s%1s%1s%1s%1s%1s%1s%1s\n" $LIN
> > done
> >
> > A percepção para um bom resultado é frustada na primeira coluna com 
> tamanho
> > diferente de texto, como abaixo:
> >
> > TEXTO-01 |28530|9|1|1|OK
> > TEXTO-022 |28491|9|1|1|OK
> > TEXTO-033 |28511|9|1|1|OK
> > TEXTO-04 |28277||||
> > TEXTO-04 |28324||||
> > TEXTO-04 |28351||||
> > TEXTO-04 |28375|||| > TEXTO-04 |28395|9|5|5|OK
> > TEXTO-0555| |28190||||
> > TEXTO-0555| |28199||||
> > TEXTO-0555| |28208||||
> > TEXTO-0555| |28217||||
> > TEXTO-0555| |28230||||
> > TEXTO-0555| |28250|9|6|6|OK
> >
> > Talvez seja simples
> >
> > Alguém conhece uma forma simples e elegante para justificar um texto 
> conforme o
> > exemplo abaixo:
> >
> > [texto original]
> > TEXTO-01| 28530|9|1|1|OK
> > TEXTO-022| 28491|9|1|1|OK
> > TEXTO-033| 28511|9|1|1|OK
> > TEXTO-04| 28277||||
> > TEXTO-04| 28324||||
> > TEXTO-04| 28351||||
> > TEXTO-04| 28375||||
> > TEXTO-04| 28395|9|5|5|OK
> > TEXTO-0555| 28190||||
> > TEXTO-0555| 28199||||
> > TEXTO-0555| 28208||||
> > TEXTO-0555| 28217||||
> > TEXTO-0555| 28230||||
> > TEXTO-0555| 28250|9|6|6|OK
> >
> > Desde já agradeço a todos.
> Entendi que o que você define por justificar é aplicar um comprimento
> fixo a uma ou várias colunas. Se de fato for esta a definição, seu
> código não funciona por assumir que o printf consegue compreender
> sozinho que há um registro é que ele é composto de campos separados por
> pipe, da forma como está, o printf "enxerga" apenas 1 argumento.
>
> Um exemplo bem simplista reescrito a partir do seu código poderia ser:
>
> while read LIN; do
> printf "%10s|%5s|%1s|%1s|%1s|%2s|\n" \
> $(tr '|' ' ' <<<"$LIN")
> done < arquivo_texto.txt
>
> -- 
> "Não manejo bem as palavras
> Mas manipulo bem as strings."
> ------------------------------
> http://tecnoveneno.blogspot.com
>
> 


[As partes desta mensagem que não continham texto foram removidas]



reply via email to

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