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

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

Re: [shell-script] JUSTIFICAR


From: jimmy
Subject: Re: [shell-script] JUSTIFICAR
Date: Fri, 11 Nov 2011 18:04:36 -0200
User-agent: mutt-ng/devel-r804 (Linux)

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


reply via email to

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