Contar palavras e executar tratamento de tamanho em Shell Script [RESOLVIDO]

1. Contar palavras e executar tratamento de tamanho em Shell Script [RESOLVIDO]

Geraldo Albuquerque
AprendiNoLinux

(usa Ubuntu)

Enviado em 18/11/2011 - 09:02h

Quem está vivo sempre aparece... Voltando a programar em Shell Script após um breve período envolvido/perdido em php.

Quem poderá me dar uma luz ?

Tenho o texto de exemplo abaixo em um arquivo. Preciso pegar cada palavra e colocar uma por linha. Após ter cada palavra em uma linha preciso pegar palavra por palavra e fazer um teste de tamanho e quando chegar a 80, iniciar uma nova linha com a próxima palavra. Não posso cortar nenhuma palavra. Se a virgula estiver junto da palavra, deve ser considerada como parte da palavra. O mesmo acontecerá com o ponto.


"
O conceito de desenvolvimento humano tem as suas origens,
bem como sublinhou Amartya Sen,
no pensamento clássico e, em particular,
com as ideias de Aristóteles, que acreditava que alcançar
a plenitude do florescimento das capacidades
humanas é o sentido e fim de todo desenvolvimento.
O conceito de desenvolvimento humano tornou-se
um conceito paralelo á noção de desenvolvimento
económico, embora o primeiro seja mais amplio,
ademais de considerar os aspectos relativos á economia e os ingresos,
integra aspectos como a qualidade de vida,
bem-estar individual e social e felicidade
inspirada nos artigos nº 22 e seguintes
da Declaração Universal dos Direitos Humanos de 1948
(Veja os artigos da Declaração).
"


O que eu já fiz:

cat texto.txt | tr " " "\n"


Passa o texto de tal forma que cada um fique em uma linha.
Agora vem a dolorosa.

Preciso ir adicionando cada palavra, incluindo um espaço e ir contando até chegar a 80. Antes de incluir a palavra fazer o teste para ver se não vai ultrapassar a 80. Se for passar, tenho que abrir uma nova linha e colocar a próxima palavra.

Não tenho nem ideia por onde começar. Colocar cada palavra em um array ?
Passar pelo conteúdo do array somando seu valor ?
Tem outra forma melhor ?









  


2. MELHOR RESPOSTA

Júlio Hoffimann Mendes
julio_hoffimann

(usa Ubuntu)

Enviado em 18/11/2011 - 10:53h

Oi Geraldo,

Você precisa de um reformatador de parágrafos. Lembra da filosofia UNIX? "Escreva programas que façam apenas uma coisa, mas que façam bem feito." Em 1993, um programa em C chamado par foi criado para reformatar parágrafos no UNIX, ele é muito poderoso e complexo.

Não sei ao certo o que você deseja, mas é bem provável que o par resolva em uma linha. ;-)

Para instalar no Ubuntu:
$ sudo apt-get install par


Você pode, por exemplo, definir o número máximo de colunas no texto:
$ cat arquivo.txt | par -w40


Resultado:


O conceito de desenvolvimento humano
tem as suas origens, bem como sublinhou
Amartya Sen, no pensamento clássico
e, em particular, com as ideias de
Aristóteles, que acreditava que
alcançar a plenitude do florescimento
das capacidades humanas é o sentido e
fim de todo desenvolvimento. O conceito
de desenvolvimento humano tornou-se
um conceito paralelo à noção de
desenvolvimento econômico, embora o
primeiro seja mais amplio, ademais de
considerar os aspectos relativos à
economia e os ingresos, integra aspectos
como a qualidade de vida, bem-estar
individual e social e felicidade
inspirada nos artigos nº 22 e seguintes
da Declaração Universal dos Direitos
Humanos de 1948 (Veja os artigos da
Declaração).


Se não gostou dos finais de linha desajustados, use a opção 'j':

$ cat arquivo.txt | par -w40j


Resultado:


O conceito de desenvolvimento humano tem
as suas origens, bem como sublinhou
Amartya Sen, no pensamento clássico
e, em particular, com as ideias
de Aristóteles, que acreditava que
alcançar a plenitude do florescimento
das capacidades humanas é o sentido e
fim de todo desenvolvimento. O conceito
de desenvolvimento humano tornou-se
um conceito paralelo à noção de
desenvolvimento econômico, embora o
primeiro seja mais amplio, ademais de
considerar os aspectos relativos à
economia e os ingresos, integra aspectos
como a qualidade de vida, bem-estar
individual e social e felicidade
inspirada nos artigos nº 22 e seguintes
da Declaração Universal dos Direitos
Humanos de 1948 (Veja os artigos da
Declaração).


Note que o par adiciona espaços em branco para ajustar o texto, um algoritmo que não é trivial de implementar. Nunca usei o programa a fundo, a documentação não é muito boa, inclusive o autor do programa pede desculpas por isso.

Mais informações: http://www.nicemice.net/par/

Abraço!

EDIT
-----------------------
Infelizmente o quote do VOL elimina espaços repetidos, o segundo resultado não é coerente com a saída do programa.

3. Re: Contar palavras e executar tratamento de tamanho em Shell Script [RESOLVIDO]

Geraldo Albuquerque
AprendiNoLinux

(usa Ubuntu)

Enviado em 18/11/2011 - 09:20h

Iniciando...


#!/bin/bash -x

# cata_palavra.sh

# Salvo o arquivo texto no arquivo palavra.txt com uma palavra por linha.

cat texto.txt | tr " " "\n" >> palavra.txt

# Preciso pegar o arquivo palavra.txt e utilizar cada palavra.
# Quando eu usar esta palavra preciso apagar a palavra usada.
# Sempre o arquivo palavra.txt só poderá ter o que ainda não usei.
# Tenho que ir salvando o que já peguei em um arquivo final de texto.
# arquivo: texto_pronto.txt


É a melhor forma de separar as palavras ?


4. Re: Contar palavras e executar tratamento de tamanho em Shell Script [RESOLVIDO]

Geraldo Albuquerque
AprendiNoLinux

(usa Ubuntu)

Enviado em 18/11/2011 - 10:01h


#!/bin/bash
#-x

# cata_palavra.sh

# Salvo o arquivo texto no arquivo palavra.txt com uma palavra por linha.

cat texto.txt | tr " " "\n" >> palavra.txt

# Preciso pegar o arquivo palavra.txt e utilizar cada palavra.
# Quando eu usar esta palavra preciso apagar a palavra usada.
# Sempre o arquivo palavra.txt só poderá ter o que ainda não usei.
# Tenho que ir salvando o que já peguei em um arquivo final de texto.
# arquivo: texto_pronto.txt

MyArray=""
while read LINHA
do
sleep 1
i=$((i+1))
MyArray[$i]="$LINHA"
echo "------------------"
echo "${MyArray[*]}"
echo "------------------"
echo "${MyArray[$i]} $i"

done < palavra.txt

clear

echo ${MyArray[*]}

exit


Mostrando a montagem do Array:

Por enquanto tudo certinho.


O 1
------------------
O conceito
------------------
conceito 2
------------------
O conceito de
------------------
de 3
------------------
O conceito de desenvolvimento
------------------
desenvolvimento 4
------------------
O conceito de desenvolvimento humano
------------------
humano 5
------------------
O conceito de desenvolvimento humano tem
------------------
tem 6
------------------
O conceito de desenvolvimento humano tem as
------------------
as 7
------------------
O conceito de desenvolvimento humano tem as suas
------------------
suas 8





5. Re: Contar palavras e executar tratamento de tamanho em Shell Script [RESOLVIDO]

Geraldo Albuquerque
AprendiNoLinux

(usa Ubuntu)

Enviado em 18/11/2011 - 11:16h

julio_hoffimann escreveu:

Oi Geraldo,

Você precisa de um reformatador de parágrafos. Lembra da filosofia UNIX? "Escreva programas que façam apenas uma coisa, mas que façam bem feito." Em 1993, um programa em C chamado par foi criado para reformatar parágrafos no UNIX, ele é muito poderoso e complexo.

Não sei ao certo o que você deseja, mas é bem provável que o par resolva em uma linha. ;-)


Valeu @julio_hoffimann, acho que você já salvou o dia. Vou estudar o bichin agora mesmo rsrs Já volto com o resultado.


6. Re: Contar palavras e executar tratamento de tamanho em Shell Script [RESOLVIDO]

Geraldo Albuquerque
AprendiNoLinux

(usa Ubuntu)

Enviado em 18/11/2011 - 11:34h

Perfeito @julio_hoffimann , problema resolvido rsrs ;)

Falta agora controlar a quantidade de linhas do texto. A quebra ficou 100% resolvida.




7. Re: Contar palavras e executar tratamento de tamanho em Shell Script [RESOLVIDO]

Geraldo Albuquerque
AprendiNoLinux

(usa Ubuntu)

Enviado em 18/11/2011 - 11:48h

Descobri um problema @julio_hoffimann , ele remove alguns caracteres especiais, como por exemplo o "@" no texto. Estou procurando algum parâmetro para neutralizar esta limpeza mas não achei.




8. Tem certeza?

Júlio Hoffimann Mendes
julio_hoffimann

(usa Ubuntu)

Enviado em 18/11/2011 - 12:20h

AprendiNoLinux escreveu:

Descobri um problema @julio_hoffimann , ele remove alguns caracteres especiais, como por exemplo o "@" no texto. Estou procurando algum parâmetro para neutralizar esta limpeza mas não achei.



Tem certeza? Aqui não tenho problemas com '@':

$ echo 'fulano@linux.com.br e outra @' | par -w10


Produz:


fulano@lin
ux.com.br
e outra @







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts