Utilizar array ou variavel que receba varias strings (endereço de sites)

1. Utilizar array ou variavel que receba varias strings (endereço de sites)

Kelvin
K3LV!N

(usa Outra)

Enviado em 12/05/2016 - 11:38h

Olá pessoal tudo bem?

estou tentando fazer um script para aplicar em um programa, no qual o pessoal me deu uma grande ajuda, a minha dúvida é, preciso capturar vários conteúdos de páginas web, de forma ou que usuário digite, ou que capture sozinho, eu criei um método mas eficiência esta igual a 0. Meu script esta o seguinte:

echo "Digite os sites: "
read imsite1
read imsite2
read imsite3
read imsite4
read imsite


logo após esse comando, essas variáveis são utilizadas para aplicação em outro programa, tornando o programa extenso, tentei procurar sobre array mas não to conseguindo entender, achei complexo e meu nível de shell não é tão elevado. no final do programa eu crio outro arquivo com os conteúdos dessas variáveis, no exemplo seguinte:


echo "O primeiro site foi '$imsite1'...

e assim sucessivamente. há algum modo de utilizar um for ou algo do tipo que consiga armazenar e já salvar de forma que eu consiga utilizar para mostrar o conteúdo dessas variáveis?


Obrigado!




  


2. Re: Utilizar array ou variavel que receba varias strings (endereço de sites)

Paulo Dias
di4s

(usa XUbuntu)

Enviado em 12/05/2016 - 12:14h


Oi, tudo bem?

Veja esse link: http://prmjuniorblog.blogspot.com.br/2013/01/iniciando-com-shell-script.html

E se tiver dúvida, poste aqui.


Linux Professional Institute - LPIC-1
Novell Certified Linux Administrator - CLA

http://twitter.com/p4ulodi4s
http://www.prminformatica.com.br/


3. Re: Utilizar array ou variavel que receba varias strings (endereço de sites)

Kelvin
K3LV!N

(usa Outra)

Enviado em 12/05/2016 - 12:46h

Eu até sei algumas noções de Shell, ao menos o básico como estrutura de condição, if,for,while case e etc... O problema é a utilização de uma única variável para receber vários conteúdos.

eu estava pensando, vejam se isso é possível:

utilizar um arquivo externo com vários endereços de site como uma lista de sites utilizada no squid

e aplicar essa lista de alguma forma para que a variável recebe cada link e ja consiga adicionar para gerar o arquivo final, como exemplo:


arquivo com sites
www.vivaolinux.com.br
www.linux.com


De alguma forma a variável site, consiga pegar linha por linha e adicionar para impressão:
se existir um site+1
ele somar para receber a proxima variavel..

como endereço e ponteiros, não sei se ha possibilidade disso
echo "seu primeiro site e: '$site'
echo "seu segundo site e: '$site'


4. Re: Utilizar array ou variavel que receba varias strings (endereço de sites)

Paulo Dias
di4s

(usa XUbuntu)

Enviado em 12/05/2016 - 13:07h

Supondo que a lista de sites está no arquivo sites.txt na mesma pasta do script principal:


for s in $( cat sites.txt ) ; do echo $s; done


Linux Professional Institute - LPIC-1
Novell Certified Linux Administrator - CLA

http://twitter.com/p4ulodi4s
http://www.prminformatica.com.br/


5. Re: Utilizar array ou variavel que receba varias strings (endereço de sites)

Kelvin
K3LV!N

(usa Outra)

Enviado em 12/05/2016 - 14:05h

Não entendi muito bem como aplico isso, na verdade eu precisaria fazer isso:

sites.txt possui o seguinte:
vivaolinux.com.br
linux.com

cada linha do arquivo que é um site deve ser utilizada desse modo:

lynx -justify -nolist -nomargins -nonumbers -dump vivaolinux.com.br > ${HOME}/primeirosite.txt

e depois salvar o conteúdo capturado pelo lynx para uma variavel, como exemplo conteudosite1

echo "conteúdo do site eh: '$conteudosite1' ....

e assim sucessivamente.


6. Re: Utilizar array ou variavel que receba varias strings (endereço de sites)

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 12/05/2016 - 18:34h

K3LV!N escreveu:

Olá pessoal tudo bem?

estou tentando fazer um script para aplicar em um programa, no qual o pessoal me deu uma grande ajuda, a minha dúvida é, preciso capturar vários conteúdos de páginas web, de forma ou que usuário digite, ou que capture sozinho, eu criei um método mas eficiência esta igual a 0. Meu script esta o seguinte:

echo "Digite os sites: "
read imsite1
read imsite2
read imsite3
read imsite4
read imsite


logo após esse comando, essas variáveis são utilizadas para aplicação em outro programa, tornando o programa extenso, tentei procurar sobre array mas não to conseguindo entender, achei complexo e meu nível de shell não é tão elevado. no final do programa eu crio outro arquivo com os conteúdos dessas variáveis, no exemplo seguinte:


echo "O primeiro site foi '$imsite1'...

e assim sucessivamente. há algum modo de utilizar um for ou algo do tipo que consiga armazenar e já salvar de forma que eu consiga utilizar para mostrar o conteúdo dessas variáveis?
Obrigado!

---------------------------------------------------------------
Boa noite K3LV!N.
Um pouco sobre ARRAY . . .
IFS=" "
#Pegando de um arquivo
read -a site <<< $(cat sites.txt|xargs)
for ((X=0;X<${#site[*]};X++)) do
echo ${site[$X]} #NESTE PONTO COLOQUE O COMANDO
done
vivaolinux.com.br
uol.com.br
google.com
ig.com.br
hardware.com.br
dicas-l.com.br


#DIGITANDO
IFS=":"
read -a XXX
12:22:55:41:13
echo ${XXX[*]}
12 22 55 41 13
#Outras opções:
read -a var <<< "um dois tres quatro cinco"

Lista todas variáveis:
echo ${XXX[*]}
ou
echo ${XXX[@]}
Lista a quantidade:
echo ${#XXX[*]}
ou
echo ${#XXX[@]}

att.:
marcelo




7. Re: Utilizar array ou variavel que receba varias strings (endereço de sites)

Kelvin
K3LV!N

(usa Outra)

Enviado em 18/05/2016 - 09:55h

Não consegui aplicar da maneira que eu preciso, como eu disse eu tenho um arquivo com uma lista de sites.

sites.txt
www.vivaolinux.com.br
www.google.com
www.linux.com

eu precisaria que pegasse linha por linha de dentro do arquivo e aplicar no meu script. que é pegar a linha 1 contem www.vivaolinux.com.br e colocar em uma variável para aplicar dentro do meu script:

#SALVAR O CONTEUDO DO SITE NO ARQUIVO
lynx -justify -nolist -nomargins -nonumbers -dump VARIAVELCOMOSITEDAPRIMEIRALINHA > ${HOME}/primeirosite.txt

aqui eu irei aplicar outros comandos para remover meta caracteres, transformar todo o conteúdo em radical e etc...
depois precisarei salvar o conteúdo editado do arquivo .txt para uma variável, eu estou utilizando o seguinte comando variavel2=(cat primeirosite.txt), e assim criar o arquivo que irei utilizar na ferramenta WEKA que estou utilizando para classificação de dados:

echo "CONTEUDO LALALALALALALALA

arquivo 'variavel2'

arquivo2 'variavel3'
" > arquivo.arff

Assim funciona, só gostaria mesmo é de uma maneira de capturar de vários sites de forma automática...

Obrigado!



8. Re: Utilizar array ou variavel que receba varias strings (endereço de sites)

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 18/05/2016 - 11:34h

K3LV!N escreveu:

Não consegui aplicar da maneira que eu preciso, como eu disse eu tenho um arquivo com uma lista de sites.

sites.txt
www.vivaolinux.com.br
www.google.com
www.linux.com

eu precisaria que pegasse linha por linha de dentro do arquivo e aplicar no meu script. que é pegar a linha 1 contem www.vivaolinux.com.br e colocar em uma variável para aplicar dentro do meu script:

#SALVAR O CONTEUDO DO SITE NO ARQUIVO
lynx -justify -nolist -nomargins -nonumbers -dump VARIAVELCOMOSITEDAPRIMEIRALINHA > ${HOME}/primeirosite.txt

aqui eu irei aplicar outros comandos para remover meta caracteres, transformar todo o conteúdo em radical e etc...
depois precisarei salvar o conteúdo editado do arquivo .txt para uma variável, eu estou utilizando o seguinte comando variavel2=(cat primeirosite.txt), e assim criar o arquivo que irei utilizar na ferramenta WEKA que estou utilizando para classificação de dados:

echo "CONTEUDO LALALALALALALALA

arquivo 'variavel2'

arquivo2 'variavel3'
" > arquivo.arff

Assim funciona, só gostaria mesmo é de uma maneira de capturar de vários sites de forma automática...

Obrigado!


Bom dia, K3LV!N.
Para "pegar" "Linha por Linha" de um ARQUIVO e gerar uma VARIÁVEL,
FAÇA:

while IFS=$'\n' read -r SITE;do
lynx -justify -nolist -nomargins -nonumbers -dump "$SITE" > ${HOME}/"$SITE".txt
done<sites.txt

#TESTADO e FUNCIONANDO . . .

É isso!

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



9. Re: Utilizar array ou variavel que receba varias strings (endereço de sites)

Kelvin
K3LV!N

(usa Outra)

Enviado em 19/05/2016 - 02:24h

Olá Marcelo, desde já agradeço sua ajuda.

Ele funciona perfeitamente, porém estou na dúvida de como consigo rodar os outros comandos que necessito, o código seguinte:

while IFS=$'\n' read -r siteproprio;do
lynx -justify -nolist -nomargins -nonumbers -dump "$siteproprio" > proprios/"$siteproprio".txt
done<sites.txt

[b]#REMOVE METACARACTERES
cat ????? | sed 's/uqe/que/g; s/qeu/que/g; s/euq/que/g; s/unknown//g; s/@card@//g; s/[*()";:%·<>\]//g;' | awk '{ print $3 }' > ?????

#REMOVER ACENTUACAO E TRANSFORMA EM MINUSCULA
cat ??????.txt | sed 's/\/\|\>\|\''\|\~\|\''\|\?\|\<\|\>\|\!\|\.\|\,\|\_\|\-\|\[\|\]\|\*\|\+\|//g' | sed 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZÀàáéÉíÍóÓúÃÕãõç/abcdefghijklmnopqrstuvwxyzaaaeeiioouaoaoc/' > ??????.txt

#TRANSFORMA O CONTEUDO (TEXTO) EM RADICAL
wine stemmer_arquivo.exe ?????.txt

#REMOVENDO ESPAÇAMENTOS
cat ?????.txt | sed '/^\s*$/d' | paste -s -d ' ' > ??????.txt

#SALVANDO CONTEUDO DO ARQUIVO NA VARIAVEL
variavel=$(cat ????.txt)


#-------- SALVANDO A BASE .arff --------#

echo "@relation conteudoimproprios
@attribute palavras {propria,impropria}
@attribute text String


@data
propria, 'variavel'
" > BaseDados.arff[/b

Como consigo criar tudo isso de forma que se repita para cada site, contudo salvando apenas 1 vez a BASE .arff com todos os conteúdos e variaveis adicionadas de forma automática, isso é possível?




10. Re: Utilizar array ou variavel que receba varias strings (endereço de sites)

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 19/05/2016 - 12:43h

K3LV!N escreveu:

Olá Marcelo, desde já agradeço sua ajuda.

Ele funciona perfeitamente, porém estou na dúvida de como consigo rodar os outros comandos que necessito, o código seguinte:

while IFS=$'\n' read -r siteproprio;do
lynx -justify -nolist -nomargins -nonumbers -dump "$siteproprio" > proprios/"$siteproprio".txt
done<sites.txt

#REMOVE METACARACTERES >>> SINTAXE ERRADA DIRECIONANDO A SAíDA PARA O ARQUIVO DE ENTRADA
cat ????? | sed 's/uqe/que/g; s/qeu/que/g; s/euq/que/g; s/unknown//g; s/@card@//g; s/[*()";:%·<>\]//g;' | awk '{ print $3 }' > ?????

#REMOVER ACENTUAÇÃO E TRANSFORMA EM MINUSCULA >>> SINTAXE ERRADA
cat ??????.txt | sed 's/\/\|\>\|\''\|\~\|\''\|\?\|\<\|\>\|\!\|\.\|\,\|\_\|\-\|\[\|\]\|\*\|\+\|//g' | sed 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZÀàáéÉíÍóÓúÃÕãõç/abcdefghijklmnopqrstuvwxyzaaaeeiioouaoaoc/' > ??????.txt

#TRANSFORMA O CONTEÚDO (TEXTO) EM RADICAL
wine stemmer_arquivo.exe ?????.txt

#REMOVENDO ESPAÇAMENTOS >>> SINTAXE ERRADA
cat ?????.txt | sed '/^\s*$/d' | paste -s -d ' ' > ??????.txt

#SALVANDO CONTEÚDO DO ARQUIVO NA VARIÁVEL
variavel=$(cat ????.txt)


#-------- SALVANDO A BASE .arff --------#

echo "@relation conteudoimproprios
@attribute palavras {propria,impropria}
@attribute text String


@data
propria, 'variavel'
" > BaseDados.arff[/b

Como consigo criar tudo isso de forma que se repita para cada site, contudo salvando apenas 1 vez a BASE .arff com todos os conteúdos e variaveis adicionadas de forma automática, isso é possível?

-------------------------------------------------------
Boa tarde!
Para "RODAR OS COMANDOS", coloque-os "NO LAÇO" "WHILE" ... "DONE".
Exemplo:

while IFS=$'\n' read -r siteproprio;do
lynx -justify -nolist -nomargins -nonumbers -dump "$siteproprio" > proprios/"$siteproprio".txt
#AQUI ENTRAM OS COMANDOS, o nome do arquivo neste ponto é: "proprios/"$siteproprio".txt"
done<sites.txt

OBS:
REVEJA seus comandos SED, de uma verificada em:
https://www.vivaolinux.com.br/topico/Shell-Script/Remover-aspas-simples 

Att.:
Marcelo Oliver




11. Re: Utilizar array ou variavel que receba varias strings (endereço de sites)

Kelvin
K3LV!N

(usa Outra)

Enviado em 20/05/2016 - 08:33h

Bom dia msoliver,

Desde já, agradeço muito sua ajuda e obrigado pelo feedback a respeito do uso do sed e demais expressões. O que o senhor me passou, esta tudo perfeitamente funcionando, só estou com a ultima dificuldade de salvar o arquivo .arff.
Pois no final do código, deve ficar assim:

variavel=$(cat ????.txt)

echo "@relation conteudoimproprios
@attribute palavras {propria,impropria}
@attribute text String


@data
propria, 'variavel'

" > BaseDados.arff[/b


Dentro desse arquivo na parte de própria, 'entravariavel'. Mas eu iria precisar adicionar essa cada vez que executa todos esses comandos em cada site, ou seja, um exemplo bobo seria:

variavel=$(cat ????.txt)
variavel2=$(cat ????.txt)
variavel3=$(cat ????.txt)

echo "@relation conteudoimproprios
@attribute palavras {propria,impropria}
@attribute text String


@data
propria, 'variavel'
propria, 'variave2l'
propria, 'variavel3'
AQUI ENTRARIA A PALAVRA PROPRIA, 'VARIAVEL4' " > BaseDados.arff[/b[/b]

E assim por diante, uma forma que consiga adicionar a palavra propria e a variável de forma automática.



12. Re: Utilizar array ou variavel que receba varias strings (endereço de sites)

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 20/05/2016 - 10:14h

K3LV!N escreveu:

Bom dia msoliver,

Desde já, agradeço muito sua ajuda e obrigado pelo feedback a respeito do uso do sed e demais expressões. O que o senhor me passou, esta tudo perfeitamente funcionando, só estou com a ultima dificuldade de salvar o arquivo .arff.
Pois no final do código, deve ficar assim:

variavel=$(cat ????.txt)

echo "@relation conteudoimproprios
@attribute palavras {propria,impropria}
@attribute text String


@data
propria, 'variavel'

" > BaseDados.arff[/b


Dentro desse arquivo na parte de própria, 'entra variavel'. Mas eu iria precisar adicionar essa cada vez que executa todos esses comandos em cada site, ou seja, um exemplo bobo seria:

variavel1=$(cat ????.txt)
variavel2=$(cat ????.txt)
variavel3=$(cat ????.txt)

echo "@relation conteudoimproprios
@attribute palavras {propria,impropria}
@attribute text String


@data
propria, 'variavel1'
propria, 'variavel2'
propria, 'variavel3'
AQUI ENTRARIA A PALAVRA PRÓPRIA, 'VARIAVEL4'" > BaseDados.arff


E assim por diante, uma forma que consiga adicionar a palavra própria e a variável de forma automática.


Bom dia K3LV!N.
Vamos aos PONTOS:
A - BaseDados.arff é um arquivo único, comum para todos os sites visitados? Me parece que SIM!
B - BaseDados.arff Deve conter a SAíDA do ECHO + "O QUE FOI GERADO na LINHA 02 (abaixo)"?SIM!
C - É GERADA uma VARIÁVEL[1-4] para cada SITE "VISITADO" (na LINHA 02 abaixo)?SIM!

A solução é:

01 while IFS=$'\n' read -r siteproprio;do
02 lynx -justify -nolist -nomargins -nonumbers -dump "$siteproprio" > proprios/"$siteproprio".txt
03 # SEUS COMANDOS SED
#-------- SALVANDO A BASE .arff --------#
echo -e "@relation conteudoimproprios\n@attribute palavras {própria,impropria}
@attribute text String\n\n\n@data\nprópria, $(cat "$siteproprio".txt)" >> BaseDados.arff
done<sites.txt


PS.: Não esqueça de MARCAR como A MELHOR RESPOSTA.... :)
Att.:
Marcelo Oliver



01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts