Laço for com arquivo de texto [RESOLVIDO]

1. Laço for com arquivo de texto [RESOLVIDO]

Adaão Ribeiro Mascarelli
adaaomad

(usa Ubuntu)

Enviado em 28/05/2016 - 14:50h

Salve galera, em um trabalho da facul preciso criar um script que use o laço for para inserir um x no começo e no final de cada palavra em um arquivo de texto. Já procurei em vários lugares e não achei. O arquivo de texto contém apenas uma linha. Agradeço desde já quem puder ajudar.


  


2. MELHOR RESPOSTA

Ronaldo Ferreira de Lima
textmode

(usa Slackware)

Enviado em 29/05/2016 - 18:44h

adaaomad escreveu:
[...]
textmode, pesquisei laço for e comando sed, mas conheço pouco desse ultimo, até agora não tinha usado ele.
o que tenho pronto até agora é:

#!/bin/bash
clear
cd /home
for i in $*; do

done
exit

e o que o msoliver mandou.
é um exercício simples, não funciona porque não sei como percorrer o arquivo e por o x entre as palavras, e tem que ser com o laço for. Estou executando esse script no conectiva10.
obrigado pela força galera, continuo tentando por aqui.


O enunciado do exercício é ambíguo demais para mim. Não define o que é "palavra" nem como o texto deve ser impresso. Vou assumir o que me convir :P.

De cara, eu assumi que o seu exercício queria isto daqui:


for palavra in $(<arquivo.txt); do
echo x${palavra}x
done


A única forma que vi para justificar o uso do laço 'for'. O problema é que isto assume que "palavra" é qualquer combinação de caracteres que não façam parte do 'IFS'.

Não parece que é a solução esperada.

---

O laço do script que você tem está percorrendo os argumentos passados ao script pela linha de comando, parece mais um pedaço de script para trabalhar com nomes de arquivos. Seguindo essa ideia, o seu script poderia ser algo como:


for palavra in $*; do
echo x${palavra}x
done


e para executar:


./script.sh algumas palavras para teste
[code]

Provavelmente, não irá resolver o seu problema porque é obrigatório passar as palavras como argumento.

---

Minha sugestão é usar apenas 'sed'. Irei assumir que "palavra" é qualquer combinação de "não-espaço", "não-pontuação" e "não-número" (dependendo do texto, isto não irá funcionar também):

[code]
sed 's/\([^[:digit:][:blank:][:punct:][:cntrl:]]\+\)/x\1\x/g' arquivo.txt


[]'s
--
"Não manejo bem as palavras
Mas manipulo bem as strings."
------------------------------
https://perspicazsite.wordpress.com


3. Re: Laço for com arquivo de texto [RESOLVIDO]

Ronaldo Ferreira de Lima
textmode

(usa Slackware)

Enviado em 28/05/2016 - 20:54h

O que você pesquisou?
O que você tem pronto até agora?
Porque não funciona?


4. Re: Laço for com arquivo de texto

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 28/05/2016 - 22:36h

adaaomad escreveu:

Salve galera, em um trabalho da facul preciso criar um script que use o laço for para inserir um x no começo e no final de cada palavra em um arquivo de texto. Já procurei em vários lugares e não achei. O arquivo de texto contém apenas uma linha. Agradeço desde já quem puder ajudar.


______________________________________________________________________________
Boa noite adaaomad.
Se é somente uma linha, necessáriamente, não precisa do "LAÇO".
Leia sobre o comando sed (substituição) e REGEX.
Exemplo:
echo "Agradeço desde já quem puder ajudar"|sed -r 's/(\b[A-Za-z]+\b)/#&#/g'
#Agradeço# #desde# #já# #quem# #puder# #ajudar#
Ou
sed -r 's/(\b[A-Za-z]+\b)/x&x/g' Arquivo.txt
xAgradeçox xdesdex xjáx xquemx xpuderx xajudarx

Onde:
cat Arquivo.txt
Agradeço desde já quem puder ajudar


Se, por força da necessidade, tiver que usar o LAÇO....
NL=$(wc -l < Arquivo.txt)  #"PEGA" A QUANTIDADE DE LINHAS DO Arquivo.txt
for ((i=1;i<=$NL;i++));do
sed -n "$i"p Arquivo.txt|sed -r 's/(\b[A-Za-z]+\b)/x&x/g'
done
xAgradeçox xdesdex xjáx xquemx xpuderx xajudarx


Outra maneira:

while IFS=$'\n' read -r line;do
IFS=" "
read -a WORD <<< "$line"
for ((i=0;i<${#WORD[*]};i++));do
echo -n "x"${WORD[$i]}x" "
done
done<Arquivo.txt
xAgradeçox xdesdex xjáx xquemx xpuderx xajudarx


Se, a resposta foi satisfatória, resolveu seu problema e te ajudou. . .
Marque-a como "A MELHOR", assim ganho uns pontos, o que incentiva a continuar colaborando . . . Rsrsrsr
Abç.:
Marcelo Oliver





5. quase

Adaão Ribeiro Mascarelli
adaaomad

(usa Ubuntu)

Enviado em 29/05/2016 - 17:52h

msoliver escreveu:

adaaomad escreveu:

Salve galera, em um trabalho da facul preciso criar um script que use o laço for para inserir um x no começo e no final de cada palavra em um arquivo de texto. Já procurei em vários lugares e não achei. O arquivo de texto contém apenas uma linha. Agradeço desde já quem puder ajudar.


______________________________________________________________________________
Boa noite adaaomad.
Se é somente uma linha, necessáriamente, não precisa do "LAÇO".
Leia sobre o comando sed (substituição) e REGEX.
Exemplo:
echo "Agradeço desde já quem puder ajudar"|sed -r 's/(\b[A-Za-z]+\b)/#&#/g'
#Agradeço# #desde# #já# #quem# #puder# #ajudar#
Ou
sed -r 's/(\b[A-Za-z]+\b)/x&x/g' Arquivo.txt
xAgradeçox xdesdex xjáx xquemx xpuderx xajudarx

Onde:
cat Arquivo.txt
Agradeço desde já quem puder ajudar


Se, por força da necessidade, tiver que usar o LAÇO....
NL=$(wc -l < Arquivo.txt)  #"PEGA" A QUANTIDADE DE LINHAS DO Arquivo.txt
for ((i=1;i<=$NL;i++));do
sed -n "$i"p Arquivo.txt|sed -r 's/(\b[A-Za-z]+\b)/x&x/g'
done
xAgradeçox xdesdex xjáx xquemx xpuderx xajudarx


Outra maneira:

while IFS=$'\n' read -r line;do
IFS=" "
read -a WORD <<< "$line"
for ((i=0;i<${#WORD[*]};i++));do
echo -n "x"${WORD[$i]}x" "
done
done<Arquivo.txt
xAgradeçox xdesdex xjáx xquemx xpuderx xajudarx


Se, a resposta foi satisfatória, resolveu seu problema e te ajudou. . .
Marque-a como "A MELHOR", assim ganho uns pontos, o que incentiva a continuar colaborando . . . Rsrsrsr
Abç.:
Marcelo Oliver



Olá msoliver, bateu na trave, a última palavra não ficou com x em volta, talvez por ter um ponto final.

textmode escreveu:

O que você pesquisou?
O que você tem pronto até agora?
Porque não funciona?


textmode, pesquisei laço for e comando sed, mas conheço pouco desse ultimo, até agora não tinha usado ele.
o que tenho pronto até agora é:

#!/bin/bash
clear
cd /home
for i in $*; do

done
exit

e o que o msoliver mandou.
é um exercício simples, não funciona porque não sei como percorrer o arquivo e por o x entre as palavras, e tem que ser com o laço for. Estou executando esse script no conectiva10.
obrigado pela força galera, continuo tentando por aqui.


6. Re: Laço for com arquivo de texto [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 29/05/2016 - 23:46h

adaaomad escreveu:

msoliver escreveu:

[quote]adaaomad escreveu:

Salve galera, em um trabalho da facul preciso criar um script que use o laço for para inserir um x no começo e no final de cada palavra em um arquivo de texto. Já procurei em vários lugares e não achei. O arquivo de texto contém apenas uma linha. Agradeço desde já quem puder ajudar.


______________________________________________________________________________
Boa noite adaaomad.
Se é somente uma linha, necessáriamente, não precisa do "LAÇO".
Leia sobre o comando sed (substituição) e REGEX.
Exemplo:
echo "Agradeço desde já quem puder ajudar"|sed -r 's/(\b[A-Za-z]+\b)/#&#/g'
#Agradeço# #desde# #já# #quem# #puder# #ajudar#
Ou
sed -r 's/(\b[A-Za-z]+\b)/x&x/g' Arquivo.txt
xAgradeçox xdesdex xjáx xquemx xpuderx xajudarx

Onde:
cat Arquivo.txt
Agradeço desde já quem puder ajudar


Se, por força da necessidade, tiver que usar o LAÇO....
NL=$(wc -l < Arquivo.txt)  #"PEGA" A QUANTIDADE DE LINHAS DO Arquivo.txt
for ((i=1;i<=$NL;i++));do
sed -n "$i"p Arquivo.txt|sed -r 's/(\b[A-Za-z]+\b)/x&x/g'
done
xAgradeçox xdesdex xjáx xquemx xpuderx xajudarx


Outra maneira:

while IFS=$'\n' read -r line;do
IFS=" "
read -a WORD <<< "$line"
for ((i=0;i<${#WORD[*]};i++));do
echo -n "x"${WORD[$i]}x" "
done
done<Arquivo.txt
xAgradeçox xdesdex xjáx xquemx xpuderx xajudarx


Se, a resposta foi satisfatória, resolveu seu problema e te ajudou. . .
Marque-a como "A MELHOR", assim ganho uns pontos, o que incentiva a continuar colaborando . . . Rsrsrsr
Abç.:
Marcelo Oliver


Olá msoliver, bateu na trave, a última palavra não ficou com x em volta, talvez por ter um ponto final.


Boa noite adaaomad.
Testei com o "." no final, e todas as opções funcionam....
Qual delas vc testou?



7. Re: Laço for com arquivo de texto [RESOLVIDO]

Adaão Ribeiro Mascarelli
adaaomad

(usa Ubuntu)

Enviado em 31/05/2016 - 00:06h

Boa noite adaaomad.
Testei com o "." no final, e todas as opções funcionam....
Qual delas vc testou?

Boa noite, testei com o for, mas a última palavra não ficava como deveria, não sei o porquê.
Obrigado msoliver e textmode pela ajuda, esse post me ajudou a compreender melhor o comando sed. no final ficou assim:

#!/bin/bash
clear
cd /home
cd texto/
for i in $(<a.txt); do
echo -n "x${i}x "
done
echo
exit

vlw






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts