Discussion:
[shell-script] Duvida, regex e array dinamico.
Rodrigo Cunha rodrigo.root.rj@gmail.com [shell-script]
2018-08-23 18:12:28 UTC
Permalink
Olá srs, preciso de uma ajuda.

Quero criar um array onde o conteúdo de um stdout seja inserido
automaticamente em posições diferentes.
No exemplo abaixo, fiz um wget para o google e retornou um texto. Quero
criar um array dinamico que insira dentro de cada posição todo conteudo(em
string) entre este padrão "--2018-08-22 16:58:04--"
Pretendo inserir um vetor, no array em cada padrão e captura-lo por uma
Regex.

EX:
Comando: #wget google.com
--2018-08-22 16:58:04-- http://google.com/
Resolvendo google.com (google.com)... 172.217.29.46, 2800:3f0:4004:808::200e
Conectando-se a google.com (google.com)|172.217.29.46|:80... conectado.
A requisição HTTP foi enviada, aguardando resposta... 301 Moved Permanently
Localização: http://www.google.com/ [redirecionando]
--2018-08-22 16:58:06-- http://www.google.com/
Resolvendo www.google.com (www.google.com)... 216.58.202.228,
2800:3f0:4004:806::2004
Conectando-se a www.google.com (www.google.com)|216.58.202.228|:80...
conectado.
A requisição HTTP foi enviada, aguardando resposta... 200 OK
Tamanho: não especificada [text/html]
Salvando em: “index.html.1”
--
Atenciosamente,
Rodrigo da Silva Cunha
São Gonçalo, RJ - Brasil
Robson Alexandre alexandrerobson@gmail.com [shell-script]
2018-08-24 17:58:53 UTC
Permalink
Rodrigo,

não entendi qual seu objetivo.

você quer executar um wget e quer pegar apenas as linhas que comecem com um
-- datetime -- e colocá-los em um array?
Você poderia nos dar um exemplo do q você recebe do wget e como vc quer a
saída?

Atenciosamente
Robson Alexandre
Post by Rodrigo Cunha ***@gmail.com [shell-script]
Olá srs, preciso de uma ajuda.
Quero criar um array onde o conteúdo de um stdout seja inserido
automaticamente em posições diferentes.
No exemplo abaixo, fiz um wget para o google e retornou um texto. Quero
criar um array dinamico que insira dentro de cada posição todo conteudo(em
string) entre este padrão "--2018-08-22 16:58:04--"
Pretendo inserir um vetor, no array em cada padrão e captura-lo por uma
Regex.
Comando: #wget google.com
--2018-08-22 16:58:04-- http://google.com/
Resolvendo google.com (google.com)... 172.217.29.46,
2800:3f0:4004:808::200e
Conectando-se a google.com (google.com)|172.217.29.46|:80... conectado.
A requisição HTTP foi enviada, aguardando resposta... 301 Moved Permanently
Localização: http://www.google..com/ <http://www.google.com/>
[redirecionando]
--2018-08-22 16:58:06-- http://www.google.com/
Resolvendo www.google.com (www.google.com)... 216.58.202.228,
2800:3f0:4004:806::2004
Conectando-se a www.google.com (www.google.com)|216.58.202.228|:80...
conectado.
A requisição HTTP foi enviada, aguardando resposta... 200 OK
Tamanho: não especificada [text/html]
Salvando em: “index.html.1”
--
Atenciosamente,
Rodrigo da Silva Cunha
São Gonçalo, RJ - Brasil
--
Atenciosamente

Robson Alexandre
Rodrigo Cunha rodrigo.root.rj@gmail.com [shell-script]
2018-08-24 21:39:38 UTC
Permalink
Opa, obrigado pela resposta.
Seguinte, eu quero pegar essa string de tempo: --2018-08-22 16:58:04-- e
inserir toda string que vem depois dela e até a proxima.Ou seja entre
strings do tipo: ( --2018-08-22 16:58:04--)
e colocar cada uma dentro de um ponteiro no array, ponteiro é posição tipo
Array = [1,2,3...];
O problema é que, dependendo do dominio o numero de strings tipo (
--2018-08-22 16:58:04-- ) muda, em função do stdout do wget. Dai vem a
necessidade de ter um array de tamanho dinamico e não um array de tamanho
fixo, pois ele funcionaria em função do stdout.

Uma outra opção seria estipular um array de tamanho estatico e se o numero
de strints tipo (--2018-08-22 16:58:04--) for maior que o array, reportar
um erro.É uma outra possibilidade.Mas a ideia de um array dinamico em
função de um stdout é algo que me interessa também.



Em sex, 24 de ago de 2018 às 14:59, Robson Alexandre
Post by Robson Alexandre ***@gmail.com [shell-script]
Rodrigo,
não entendi qual seu objetivo.
você quer executar um wget e quer pegar apenas as linhas que comecem com
um -- datetime -- e colocá-los em um array?
Você poderia nos dar um exemplo do q você recebe do wget e como vc quer a
saída?
Atenciosamente
Robson Alexandre
Em qui, 23 de ago de 2018 às 15:12, Rodrigo Cunha
Post by Rodrigo Cunha ***@gmail.com [shell-script]
Olá srs, preciso de uma ajuda.
Quero criar um array onde o conteúdo de um stdout seja inserido
automaticamente em posições diferentes.
No exemplo abaixo, fiz um wget para o google e retornou um texto. Quero
criar um array dinamico que insira dentro de cada posição todo
conteudo(em string) entre este padrão "--2018-08-22 16:58:04--"
Pretendo inserir um vetor, no array em cada padrão e captura-lo por uma
Regex..
Comando: #wget google.com
--2018-08-22 16:58:04-- http://google.com/
Resolvendo google.com (google.com)... 172.217.29.46,
2800:3f0:4004:808::200e
Conectando-se a google.com (google.com)|172.217.29.46|:80... conectado.
A requisição HTTP foi enviada, aguardando resposta... 301 Moved Permanently
Localização: http://www.google..com/ <http://www.google.com/>
[redirecionando]
--2018-08-22 16:58:06-- http://www.google.com/
Resolvendo www.google.com (www.google.com)... 216.58.202.228,
2800:3f0:4004:806::2004
Conectando-se a www.google.com (www.google.com)|216.58.202.228|:80....
conectado.
A requisição HTTP foi enviada, aguardando resposta... 200 OK
Tamanho: não especificada [text/html]
Salvando em: “index.html.1”
--
Atenciosamente,
Rodrigo da Silva Cunha
São Gonçalo, RJ - Brasil
--
Atenciosamente
Robson Alexandre
--
Atenciosamente,
Rodrigo da Silva Cunha
São Gonçalo, RJ - Brasil
phfbettega@yahoo.com.br [shell-script]
2018-08-24 23:32:50 UTC
Permalink
Olá Rodrigo, veja se ajuda, não sei se entendi direito.


i=;while read linha; do
[[ "$linha" =~ --....-..-..\ ..:..:..-- ]] && { let i++;j=0;}
eval vetor$i[j++]="\$linha";done < <(wget google.com 2>&1)

for i in ${!vetor1[*]};do echo "${vetor1[i]}";done
--2018-08-24 20:29:57-- http://google.com/
Resolvendo google.com (google.com)... 216.58.202.206, 2800:3f0:4001:817::200e
Conectando-se a google.com (google.com)|216.58.202.206|:80... conectado.
A requisição HTTP foi enviada, aguardando resposta... 301 Moved Permanently
Localização: http://www.google.com/ [redirecionando]

for i in ${!vetor2[*]};do echo "${vetor2[i]}";done
--2018-08-24 20:29:57-- http://www.google.com/
Resolvendo www.google.com (www.google.com)... 64.233.190.147, 64.233.190.99, 64.233.190.105, ...
Conectando-se a www.google.com (www.google.com)|64.233.190.147|:80... conectado.
A requisição HTTP foi enviada, aguardando resposta... 200 OK
Tamanho: não especificada [text/html]
Salvando em: “index.html.7”

0K .......... . 168K=0,07s

2018-08-24 20:29:58 (168 KB/s) - “index.html.7” salvo [11737]


Abraços Paulo
Post by Rodrigo Cunha ***@gmail.com [shell-script]
Olá srs, preciso de uma ajuda.
Quero criar um array onde o conteúdo de um stdout seja inserido automaticamente em posições diferentes.
No exemplo abaixo, fiz um wget para o google e retornou um texto. Quero
criar um array dinamico que insira dentro de cada posição todo conteudo(em string) entre este padrão
"--2018-08-22 16:58:04--"
Pretendo inserir um vetor, no array em cada padrão e captura-lo por uma Regex.
Comando: #wget google.com <http://google.com>
--2018-08-22 16:58:04-- http://google.com/
Resolvendo google.com <http://google.com> (google.com <http://google.com>)... 172.217.29.46,
2800:3f0:4004:808::200e
Conectando-se a google.com <http://google.com> (google.com <http://google.com>)|172.217.29.46|:80... conectado.
A requisição HTTP foi enviada, aguardando resposta... 301 Moved Permanently
Localização: http://www.google..com/ <http://www.google.com/> [redirecionando]
--2018-08-22 16:58:06-- http://www.google.com/
Resolvendo www.google.com <http://www.google.com> (www.google.com <http://www.google.com>)... 216.58.202.228,
2800:3f0:4004:806::2004
Conectando-se a www.google.com <http://www.google.com> (www.google.com
<http://www.google.com>)|216.58.202.228|:80... conectado.
A requisição HTTP foi enviada, aguardando resposta... 200 OK
Tamanho: não especificada [text/html]
Salvando em: “index.html.1”
--
Atenciosamente,
Rodrigo da Silva Cunha
São Gonçalo, RJ - Brasil
--------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------
Rodrigo Cunha rodrigo.root.rj@gmail.com [shell-script]
2018-08-25 02:56:54 UTC
Permalink
Em parte sim,na regex está perfeito, mas eu gostaria de declarar apenas um
array e colocar as diferentes entradas em diferentes posições, mas com
apenas um array.
Post by ***@yahoo.com.br [shell-script]
Olá Rodrigo, veja se ajuda, não sei se entendi direito.
i=;while read linha; do
[[ "$linha" =~ --....-..-..\ ..:..:..-- ]] && { let i++;j=0;}
eval vetor$i[j++]="\$linha";done < <(wget google.com 2>&1)
for i in ${!vetor1[*]};do echo "${vetor1[i]}";done
--2018-08-24 20:29:57-- http://google.com/
Resolvendo google.com (google.com)... 216.58.202.206,
2800:3f0:4001:817::200e
Conectando-se a google.com (google.com)|216.58.202.206|:80... conectado.
A requisição HTTP foi enviada, aguardando resposta... 301 Moved Permanently
Localização: http://www.google.com/ [redirecionando]
for i in ${!vetor2[*]};do echo "${vetor2[i]}";done
--2018-08-24 20:29:57-- http://www.google.com/
Resolvendo www.google.com (www.google.com)... 64.233.190.147,
64.233.190.99, 64.233.190.105, ...
Conectando-se a www.google.com (www.google.com)|64.233.190.147|:80... conectado.
A requisição HTTP foi enviada, aguardando resposta... 200 OK
Tamanho: não especificada [text/html]
Salvando em: “index.html.7”
0K .......... . 168K=0,07s
2018-08-24 20:29:58 (168 KB/s) - “index.html.7” salvo [11737]
Abraços Paulo
Post by Rodrigo Cunha ***@gmail.com [shell-script]
Olá srs, preciso de uma ajuda.
Quero criar um array onde o conteúdo de um stdout seja inserido
automaticamente em posições diferentes.
Post by Rodrigo Cunha ***@gmail.com [shell-script]
No exemplo abaixo, fiz um wget para o google e retornou um texto. Quero
criar um array dinamico que insira dentro de cada posição todo
conteudo(em string) entre este padrão
Post by Rodrigo Cunha ***@gmail.com [shell-script]
"--2018-08-22 16:58:04--"
Pretendo inserir um vetor, no array em cada padrão e captura-lo por uma
Regex.
Post by Rodrigo Cunha ***@gmail.com [shell-script]
Comando: #wget google.com <http://google.com>
--2018-08-22 16:58:04-- http://google.com/
Resolvendo google.com <http://google.com> (google.com <http://google.com>)...
172.217.29.46,
Post by Rodrigo Cunha ***@gmail.com [shell-script]
2800:3f0:4004:808::200e
Conectando-se a google.com <http://google.com> (google.com <
http://google.com>)|172.217.29.46|:80... conectado.
Post by Rodrigo Cunha ***@gmail.com [shell-script]
A requisição HTTP foi enviada, aguardando resposta... 301 Moved
Permanently
Post by Rodrigo Cunha ***@gmail.com [shell-script]
Localização: http://www.google..com/ <http://www.google.com/>
[redirecionando]
Post by Rodrigo Cunha ***@gmail.com [shell-script]
--2018-08-22 16:58:06-- http://www.google.com/
Resolvendo www.google.com <http://www.google.com> (www.google.com <
http://www.google.com>)... 216.58.202.228,
Post by Rodrigo Cunha ***@gmail.com [shell-script]
2800:3f0:4004:806::2004
Conectando-se a www.google.com <http://www.google.com> (www.google.com
<http://www.google.com>)|216.58.202.228|:80... conectado.
A requisição HTTP foi enviada, aguardando resposta... 200 OK
Tamanho: não especificada [text/html]
Salvando em: “index.html.1”
--
Atenciosamente,
Rodrigo da Silva Cunha
São Gonçalo, RJ - Brasil
----------------------------------------------------------
----------------------------------------------------------
--
Atenciosamente,
Rodrigo da Silva Cunha
São Gonçalo, RJ - Brasil
phfbettega@yahoo.com.br [shell-script]
2018-08-25 11:55:59 UTC
Permalink
Carregar um arquivo em um array?
http://wiki.softwarelivre.org/TWikiBar/TWikiBarTalkSnacks#Lendo_um_arquivo_para_um_vetor
Abraços Paulo
Em parte sim,na regex está perfeito, mas eu gostaria de declarar apenas um array e colocar as diferentes
entradas em diferentes posições, mas com apenas um array.
__
Olá Rodrigo, veja se ajuda, não sei se entendi direito.
i=;while read linha; do
[[ "$linha" =~ --....-..-..\ ..:..:..-- ]] && { let i++;j=0;}
eval vetor$i[j++]="\$linha";done < <(wget google.com <http://google.com> 2>&1)
for i in ${!vetor1[*]};do echo "${vetor1[i]}";done
--2018-08-24 20:29:57-- http://google.com/
Resolvendo google.com <http://google.com> (google.com <http://google.com>)... 216.58.202.206,
2800:3f0:4001:817::200e
Conectando-se a google.com <http://google.com> (google.com <http://google.com>)|216.58.202.206|:80...
conectado.
A requisição HTTP foi enviada, aguardando resposta... 301 Moved Permanently
Localização: http://www.google.com/ [redirecionando]
for i in ${!vetor2[*]};do echo "${vetor2[i]}";done
--2018-08-24 20:29:57-- http://www.google.com/
Resolvendo www.google.com <http://www.google.com> (www.google.com <http://www.google.com>)...
64.233.190.147, 64.233.190.99, 64.233.190.105, ...
Conectando-se a www.google.com <http://www.google.com> (www.google.com
<http://www.google.com>)|64.233.190.147|:80... conectado.
A requisição HTTP foi enviada, aguardando resposta... 200 OK
Tamanho: não especificada [text/html]
Salvando em: “index.html.7”
0K .......... . 168K=0,07s
2018-08-24 20:29:58 (168 KB/s) - “index.html.7” salvo [11737]
Abraços Paulo
Post by Rodrigo Cunha ***@gmail.com [shell-script]
Olá srs, preciso de uma ajuda.
Quero criar um array onde o conteúdo de um stdout seja inserido automaticamente em posições diferentes.
No exemplo abaixo, fiz um wget para o google e retornou um texto. Quero
criar um array dinamico que insira dentro de cada posição todo conteudo(em string) entre este padrão
"--2018-08-22 16:58:04--"
Pretendo inserir um vetor, no array em cada padrão e captura-lo por uma Regex.
Comando: #wget google.com <http://google.com> <http://google.com>
--2018-08-22 16:58:04-- http://google.com/
Resolvendo google.com <http://google.com> <http://google.com> (google.com <http://google.com>
<http://google.com>)... 172.217.29.46,
Post by Rodrigo Cunha ***@gmail.com [shell-script]
2800:3f0:4004:808::200e
Conectando-se a google.com <http://google.com> <http://google.com> (google.com <http://google.com>
<http://google.com>)|172.217.29.46|:80... conectado.
Post by Rodrigo Cunha ***@gmail.com [shell-script]
A requisição HTTP foi enviada, aguardando resposta... 301 Moved Permanently
Localização: http://www.google..com/ <http://www.google.com/> [redirecionando]
--2018-08-22 16:58:06-- http://www.google.com/
Resolvendo www.google.com <http://www.google.com> <http://www.google.com> (www.google.com
<http://www.google.com> <http://www.google.com>)... 216.58.202.228,
Post by Rodrigo Cunha ***@gmail.com [shell-script]
2800:3f0:4004:806::2004
Conectando-se a www.google.com <http://www.google.com> <http://www.google.com> (www.google.com
<http://www.google.com>
Post by Rodrigo Cunha ***@gmail.com [shell-script]
<http://www.google.com>)|216.58.202.228|:80... conectado.
A requisição HTTP foi enviada, aguardando resposta... 200 OK
Tamanho: não especificada [text/html]
Salvando em: “index.html.1”
--
Atenciosamente,
Rodrigo da Silva Cunha
São Gonçalo, RJ - Brasil
----------------------------------------------------------
----------------------------------------------------------
--
Atenciosamente,
Rodrigo da Silva Cunha
São Gonçalo, RJ - Brasil
--------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------
'Julio C. Neves' julio.neves@gmail.com [shell-script]
2018-08-25 17:22:24 UTC
Permalink
Valeu Paulo,
essa página que vc citou foi escrita por mim mas como estava sem
atualização, tirei-a do ar, mas pelo visto ainda ficou um pedacinho... ;)

Não sei se essa é a dúvida do nosso colega, pois não a li, mas de qq forma,
vou colar aqui em baixo tudo que sei sobre o cmd mapfile que é um builtin
(e portanto muito veloz) que foi inserido a partir do Bash 4.0.

Espero que seja bastante útil...

Lendo um arquivo para um vetor

Ainda falando do *bash 4.0*, eis que ele surge com uma outra novidade: o
comando intrínseco (*built-in*) mapfile, cuja finalidade é ler linhas da
entrada primária (*stdin*) para dentro de um vetor indexado, sem fazer
*loop* ou substituição de comando. Sua sintaxe é a seguinte:

*mapfile [OPCS] [VETOR]*

Onde os dados recebidos pela entrada primária irão para o vetor VETOR. Caso
ele não seja especificado, a variável do sistema, MAPFILE, se incumbirá de
receber esses dados.

As principais opções OPCS são:

Opção

Efeito

*-n QTD*

Copia, no máximo,* QTD *linhas

*-O ORIGEM*

Usa* ORIGEM *como o menor índice de* VETOR*

*-s QTD*

Descarta as primeiras* QTD *linhas

*-c QTD*

A cada* QTD *linhas lidas executa o que for especificado pela opção* -c*

*-C COD*

Executa o código *Shell* especificado em* COD. *O índice de* VETOR *é
adicionado ao final

-

EPA! Isso deve ser muito rápido!
-

E é. Faça os testes e comprove! Veja só como ele funciona:

*$ cat frutas **Não confunda o arquivo com o vetor que usamos*

abacate

maçã

morango

pera

tangerina

uva

*$ mapfile vet < frutas **Mandando frutas para vetor vet*

$ echo ${vet[@]} *Listando todos os elementos de vet*

abacate maçã morango pera tangerina uva

Obteríamos resultado idêntico se fizéssemos:

*$ vet=($(cat frutas))*

Porém, isso seria mais lento porque a substituição de comando é executada
em um *subshell*. Uma outra forma de fazer isso que logo vem à cabeça é ler
o arquivo com a opção -a do comando read. Vamos ver como seria o
comportamento disso:

*$ read -a vet < frutas*

*$ echo ${vet[@]}*

abacate

Como deu para perceber, foi lido somente o primeiro registro de frutas porque
esse formato de read precisa receber todos os dados que serão lidos para o
vetor vet. Para consertar isso poderíamos fazer:

*$ read -a vet <<< $(cat frutas)*

*$ echo ${vet[@]}*

abacate maçã morango pera tangerina uva

Mas aí a performance será pior até do que a anterior, pois também usa
substituição de comandos e ainda por cima usa a instrução cat, que não é
*built-in*.

Vejamos como funcionam as suas principais opções:

*$ mapfile -n3 vet < frutas **Para ler somente três linhas*

*$ echo ${vet[@]} **Exibe os dados*

abacate maçã morango

*$ echo ${!vet[@]} **Exibe os índices*

0 1 2

*$ unset vet **"Mata" o vetor*

*$ mapfile vet < frutas **Começando de novo*

*$ echo ${vet[@]} *

abacate maçã morango pera tangerina uva

*$ echo ${!vet[@]} *

0 1 2 3 4 5

*$ mapfile -O 6 vet < frutas **Menor índice será o que já tinha mais 1*

*$ echo ${vet[@]} *

abacate maçã morango pera tangerina uva abacate maçã morango pera tangerina
uva

*$ echo ${!vet[@]}*

0 1 2 3 4 5 6 7 8 9 10 11

*$ unset vet*

*$ mapfile -s 3 vet < frutas **Despreza três linhas iniciais de frutas*

*$ echo ${vet[@]}*

pera tangerina uva

*$ echo ${!vet[@]}*

0 1 2

*$ mapfile -c1 -C"echo carreguei o índice" < frutas*

carreguei o índice 0 abacate

carreguei o índice 1 maçã

carreguei o índice 2 morango

carreguei o índice 3 pera

carreguei o índice 4 tangerina

carreguei o índice 5 uva

O mesmo resultado seria obtido se fizesse:

*$ mapfile -c1 -C"printf 'carreguei o índice %d %s\n'" < frutas *

carreguei o índice 0

carreguei o índice 1

carreguei o índice 2

carreguei o índice 3

carreguei o índice 4

carreguei o índice 5

No entanto, poderíamos desprezar os índices, que são automaticamente lançado
s para a saída, se não especificarmos a máscara do printf para recebê-los (no
caso %d e %s) Vamos aproveitar e tirar também o \n para não saltar muita
linha. Veja:

*$ mapfile -c1 -C"printf 'Carreguei o índice'" < frutas*

Carreguei o índiceCarreguei o índiceCarreguei o índiceCarreguei o
índiceCarreguei o índiceCarreguei o índice

Epa, isso me deu uma ideia! Posso simular uma barra de progresso rústica
usando essa técnica. Vejamos:

*$ mapfile -c1 -C"printf '#'" < frutas*

######$

Nesses últimos exemplos, não especificamos o nome do vetor. Assim sendo, o
*bash* mandou todos os dados para MAPFILE. Veja:

*$ echo ${MAPFILE[@]} *

abacate maçã morango pera tangerina uva

Isto é, foi lançado um jogo-da-velha (#) para cada elemento carregado no
vetor. Isso é muito legal, mas se a quantidade de elementos for muito
grande, a qualidade da apresentação será prejudicada. Para resolver isso,
basta incrementar o valor da opção -c. Observe também que o *prompt* ficou
colado na saída, sem saltar linha. Para resolver isso, o melhor é colocar um
echo puro no final da linha. Vamos ver como carregar um vetor com duzentos
elementos:

*$ printf '%s\n' {1..200} | mapfile -c20 -C 'printf "#"'; echo*

##########


Abraços,
Julio

*» Não tem tempo para fazer um curso presencial?*
*» Na sua cidade não tem nenhum bom curso de Linux?*
*» **Conheça nosso portal educacional e estude conosco: *
* http://www.dicas-l.com.br/educacao
<http://www.dicas-l.com.br/educacao/>*
*» Treinamento presencial (em 4 sábados) no RJ e BSB *
* em http://bit.ly/cursoshelljulioneves
<http://bit.ly/cursoshelljulioneves> *



*Também damos treinamento em sua empresa*
*em qualquer cidade**, **com certificado **e nota fiscal.*

​​
Post by ***@yahoo.com.br [shell-script]
Carregar um arquivo em um array?
http://wiki.softwarelivre.org/TWikiBar/TWikiBarTalkSnacks#
Lendo_um_arquivo_para_um_vetor
Abraços Paulo
Post by Rodrigo Cunha ***@gmail.com [shell-script]
Em parte sim,na regex está perfeito, mas eu gostaria de declarar apenas
um array e colocar as diferentes
Post by Rodrigo Cunha ***@gmail.com [shell-script]
entradas em diferentes posições, mas com apenas um array.
__
Olá Rodrigo, veja se ajuda, não sei se entendi direito.
i=;while read linha; do
[[ "$linha" =~ --....-..-..\ ..:..:..-- ]] && { let i++;j=0;}
eval vetor$i[j++]="\$linha";done < <(wget google.com <http://google.com>
2>&1)
Post by Rodrigo Cunha ***@gmail.com [shell-script]
for i in ${!vetor1[*]};do echo "${vetor1[i]}";done
--2018-08-24 20:29:57-- http://google.com/
Resolvendo google.com <http://google.com> (google.com <http://google.com>)...
216.58.202.206,
Post by Rodrigo Cunha ***@gmail.com [shell-script]
2800:3f0:4001:817::200e
Conectando-se a google.com <http://google.com> (google.com <
http://google.com>)|216.58.202.206|:80...
Post by Rodrigo Cunha ***@gmail.com [shell-script]
conectado.
A requisição HTTP foi enviada, aguardando resposta... 301 Moved
Permanently
Post by Rodrigo Cunha ***@gmail.com [shell-script]
Localização: http://www.google.com/ [redirecionando]
for i in ${!vetor2[*]};do echo "${vetor2[i]}";done
--2018-08-24 20:29:57-- http://www.google.com/
Resolvendo www.google.com <http://www.google.com> (www.google.com <
http://www.google.com>)...
Post by Rodrigo Cunha ***@gmail.com [shell-script]
64.233.190.147, 64.233.190.99, 64.233.190.105, ...
Conectando-se a www.google.com <http://www.google.com> (www.google.com
<http://www.google.com>)|64.233.190.147|:80... conectado.
A requisição HTTP foi enviada, aguardando resposta... 200 OK
Tamanho: não especificada [text/html]
Salvando em: “index.html.7”
0K .......... . 168K=0,07s
2018-08-24 20:29:58 (168 KB/s) - “index.html.7” salvo [11737]
Abraços Paulo
Post by Rodrigo Cunha ***@gmail.com [shell-script]
Olá srs, preciso de uma ajuda.
Quero criar um array onde o conteúdo de um stdout seja inserido
automaticamente em posições diferentes.
Post by Rodrigo Cunha ***@gmail.com [shell-script]
Post by Rodrigo Cunha ***@gmail.com [shell-script]
No exemplo abaixo, fiz um wget para o google e retornou um texto. Quero
criar um array dinamico que insira dentro de cada posição todo
conteudo(em string) entre este padrão
Post by Rodrigo Cunha ***@gmail.com [shell-script]
Post by Rodrigo Cunha ***@gmail.com [shell-script]
"--2018-08-22 16:58:04--"
Pretendo inserir um vetor, no array em cada padrão e captura-lo por
uma Regex.
Post by Rodrigo Cunha ***@gmail.com [shell-script]
Post by Rodrigo Cunha ***@gmail.com [shell-script]
Comando: #wget google.com <http://google.com> <http://google.com>
--2018-08-22 16:58:04-- http://google.com/
Resolvendo google.com <http://google.com> <http://google.com> (
google.com <http://google.com>
Post by Rodrigo Cunha ***@gmail.com [shell-script]
<http://google.com>)... 172.217.29.46,
Post by Rodrigo Cunha ***@gmail.com [shell-script]
2800:3f0:4004:808::200e
Conectando-se a google.com <http://google.com> <http://google.com> (
google.com <http://google.com>
Post by Rodrigo Cunha ***@gmail.com [shell-script]
<http://google.com>)|172.217.29.46|:80... conectado.
Post by Rodrigo Cunha ***@gmail.com [shell-script]
A requisição HTTP foi enviada, aguardando resposta.... 301 Moved
Permanently
Post by Rodrigo Cunha ***@gmail.com [shell-script]
Post by Rodrigo Cunha ***@gmail.com [shell-script]
Localização: http://www.google..com/ <http://www.google.com/>
[redirecionando]
Post by Rodrigo Cunha ***@gmail.com [shell-script]
Post by Rodrigo Cunha ***@gmail.com [shell-script]
--2018-08-22 16:58:06-- http://www.google.com/
Resolvendo www.google.com <http://www.google.com> <
http://www.google.com> (www.google.com
Post by Rodrigo Cunha ***@gmail.com [shell-script]
<http://www.google.com> <http://www.google.com>)... 216.58.202.228,
Post by Rodrigo Cunha ***@gmail.com [shell-script]
2800:3f0:4004:806::2004
Conectando-se a www.google.com <http://www.google.com> <
http://www.google.com> (www.google.com
Post by Rodrigo Cunha ***@gmail.com [shell-script]
<http://www.google.com>
Post by Rodrigo Cunha ***@gmail.com [shell-script]
<http://www.google.com>)|216.58.202.228|:80... conectado.
A requisição HTTP foi enviada, aguardando resposta.... 200 OK
Tamanho: não especificada [text/html]
Salvando em: “index.html.1”
--
Atenciosamente,
Rodrigo da Silva Cunha
São Gonçalo, RJ - Brasil
----------------------------------------------------------
----------------------------------------------------------
--
Atenciosamente,
Rodrigo da Silva Cunha
São Gonçalo, RJ - Brasil
----------------------------------------------------------
----------------------------------------------------------
Robson Alexandre alexandrerobson@gmail.com [shell-script]
2018-08-25 21:40:43 UTC
Permalink
Rodrigo,

não tenho certeza se compreendi o que exatamente vc pretende fazer, mas
entendi que vc quer transformar a saída abaixo:

--2018-08-22 16:58:04-- http://google.com/
Resolvendo google.com (google.com)... 172.217.29.46, 2800:3f0:4004:808::200e
Conectando-se a google.com (google.com)|172.217.29.46|:80... conectado.
A requisição HTTP foi enviada, aguardando resposta... 301 Moved Permanently
Localização: http://www.google..com/ <http://www.google.com/>
[redirecionando]
--2018-08-22 16:58:06-- http://www.google.com/
Resolvendo www.google.com (www.google.com)... 216.58.202.228,
2800:3f0:4004:806::2004
Conectando-se a www.google.com (www.google.com)|216.58.202.228|:80...
conectado.
A requisição HTTP foi enviada, aguardando resposta... 200 OK
Tamanho: não especificada [text/html]
Salvando em: “index.html.1”

em índices de um array como:

array[0]="--2018-08-22 16:58:04-- http://google.com/ Resolvendo google.com
(google.com)... 172.217.29.46, 2800:3f0:4004:808::200e Conectando-se a
google.com (google.com)|172.217.29.46|:80... conectado. A requisição HTTP
foi enviada, aguardando resposta... 301 Moved Permanently Localização:
http://www.google..com/ <http://www.google.com/> [redirecionando]"

array[1]="--2018-08-22 16:58:06- http://www.google.com/ Resolvendo
www.google.com (www.google.com)... 216.58.202.228, 2800:3f0:4004:806::2004
Conectando-se a www.google.com (www.google.com)|216.58.202.228|:80...
conectado. A requisição HTTP foi enviada, aguardando resposta... 200 OK
Tamanho: não especificada [text/html] Salvando em: “index.html..1”"


Então vc poderia testar o seguinte comando:

stdout=$(wget google.com 2>&1)
mapfile array < <(sed 's/^--/#\n--/g; $a#' <<< "$stdout" | sed '/^--/{:a;
/#/!{N;ba}; s/\n/ /g}')
echo ${array[1]}
echo ${array[2]}

Em caso do gmail (des)formatar as linhas de comando deixei um termbin abaixo
http://termbin.com/dj58



Atenciosamente
Robson Alexandre
Post by 'Julio C. Neves' ***@gmail.com [shell-script]
Valeu Paulo,
essa página que vc citou foi escrita por mim mas como estava sem
atualização, tirei-a do ar, mas pelo visto ainda ficou um pedacinho... ;)
Não sei se essa é a dúvida do nosso colega, pois não a li, mas de qq
forma, vou colar aqui em baixo tudo que sei sobre o cmd mapfile que é um
builtin (e portanto muito veloz) que foi inserido a partir do Bash 4.0.
Espero que seja bastante útil...
Lendo um arquivo para um vetor
Ainda falando do *bash 4.0*, eis que ele surge com uma outra novidade: o
comando intrínseco (*built-in*) mapfile, cuja finalidade é ler linhas da
entrada primária (*stdin*) para dentro de um vetor indexado, sem fazer
*mapfile [OPCS] [VETOR]*
Onde os dados recebidos pela entrada primária irão para o vetor VETOR. Caso
ele não seja especificado, a variável do sistema, MAPFILE, se incumbirá
de receber esses dados.
Opção
Efeito
*-n QTD*
Copia, no máximo,* QTD *linhas
*-O ORIGEM*
Usa* ORIGEM *como o menor índice de* VETOR*
*-s QTD*
Descarta as primeiras* QTD *linhas
*-c QTD*
A cada* QTD *linhas lidas executa o que for especificado pela opção* -c*
*-C COD*
Executa o código *Shell* especificado em* COD. *O índice de* VETOR *é
adicionado ao final
-
EPA! Isso deve ser muito rápido!
-
*$ cat frutas **Não confunda o arquivo com o vetor que usamos*
abacate
maçã
morango
pera
tangerina
uva
*$ mapfile vet < frutas **Mandando frutas para vetor vet*
abacate maçã morango pera tangerina uva
*$ vet=($(cat frutas))*
Porém, isso seria mais lento porque a substituição de comando é executada
em um *subshell*. Uma outra forma de fazer isso que logo vem à cabeça é
ler o arquivo com a opção -a do comando read. Vamos ver como seria o
*$ read -a vet < frutas*
abacate
Como deu para perceber, foi lido somente o primeiro registro de frutas porque
esse formato de read precisa receber todos os dados que serão lidos para
*$ read -a vet <<< $(cat frutas)*
abacate maçã morango pera tangerina uva
Mas aí a performance será pior até do que a anterior, pois também usa
substituição de comandos e ainda por cima usa a instrução cat, que não é
*built-in*.
*$ mapfile -n3 vet < frutas **Para ler somente três linhas*
abacate maçã morango
0 1 2
*$ unset vet **"Mata" o vetor*
*$ mapfile vet < frutas **Começando de novo*
abacate maçã morango pera tangerina uva
0 1 2 3 4 5
*$ mapfile -O 6 vet < frutas **Menor índice será o que já tinha mais 1*
abacate maçã morango pera tangerina uva abacate maçã morango pera
tangerina uva
0 1 2 3 4 5 6 7 8 9 10 11
*$ unset vet*
*$ mapfile -s 3 vet < frutas **Despreza três linhas iniciais de frutas*
pera tangerina uva
0 1 2
*$ mapfile -c1 -C"echo carreguei o índice" < frutas*
carreguei o índice 0 abacate
carreguei o índice 1 maçã
carreguei o índice 2 morango
carreguei o índice 3 pera
carreguei o índice 4 tangerina
carreguei o índice 5 uva
*$ mapfile -c1 -C"printf 'carreguei o índice %d %s\n'" < frutas *
carreguei o índice 0
carreguei o índice 1
carreguei o índice 2
carreguei o índice 3
carreguei o índice 4
carreguei o índice 5
No entanto, poderíamos desprezar os índices, que são automaticamente
lançados para a saída, se não especificarmos a máscara do printf para
recebê-los (no caso %d e %s) Vamos aproveitar e tirar também o \n para
*$ mapfile -c1 -C"printf 'Carreguei o índice'" < frutas*
Carreguei o índiceCarreguei o índiceCarreguei o índiceCarreguei o
índiceCarreguei o índiceCarreguei o índice
Epa, isso me deu uma ideia! Posso simular uma barra de progresso rústica
*$ mapfile -c1 -C"printf '#'" < frutas*
######$
Nesses últimos exemplos, não especificamos o nome do vetor. Assim sendo, o
abacate maçã morango pera tangerina uva
Isto é, foi lançado um jogo-da-velha (#) para cada elemento carregado no
vetor. Isso é muito legal, mas se a quantidade de elementos for muito
grande, a qualidade da apresentação será prejudicada. Para resolver isso,
basta incrementar o valor da opção -c. Observe também que o *prompt*
ficou colado na saída, sem saltar linha. Para resolver isso, o melhor é
colocar um echo puro no final da linha. Vamos ver como carregar um vetor
*$ printf '%s\n' {1..200} | mapfile -c20 -C 'printf "#"'; echo*
##########
Abraços,
Julio
*» Não tem tempo para fazer um curso presencial?*
*» Na sua cidade não tem nenhum bom curso de Linux?*
*» **Conheça nosso portal educacional e estude conosco: *
* http://www.dicas-l.com.br/educacao
<http://www.dicas-l.com.br/educacao/>*
*» Treinamento presencial (em 4 sábados) no RJ e BSB *
* em http://bit.ly/cursoshelljulioneves
<http://bit.ly/cursoshelljulioneves> *
*Também damos treinamento em sua empresa*
*em qualquer cidade**, **com certificado **e nota fiscal.*
​​
Carregar um arquivo em um array?
Post by ***@yahoo.com.br [shell-script]
http://wiki.softwarelivre.org/TWikiBar/TWikiBarTalkSnacks#Lendo_um_arquivo_para_um_vetor
Abraços Paulo
Post by Rodrigo Cunha ***@gmail.com [shell-script]
Em parte sim,na regex está perfeito, mas eu gostaria de declarar apenas
um array e colocar as diferentes
Post by Rodrigo Cunha ***@gmail.com [shell-script]
entradas em diferentes posições, mas com apenas um array.
__
Olá Rodrigo, veja se ajuda, não sei se entendi direito.
i=;while read linha; do
[[ "$linha" =~ --....-..-..\ ..:..:..-- ]] && { let i++;j=0;}
eval vetor$i[j++]="\$linha";done < <(wget google.com <http://google.com>
2>&1)
Post by Rodrigo Cunha ***@gmail.com [shell-script]
for i in ${!vetor1[*]};do echo "${vetor1[i]}";done
--2018-08-24 20:29:57-- http://google.com/
Resolvendo google.com <http://google.com> (google.com <
http://google.com>)... 216.58.202.206,
Post by Rodrigo Cunha ***@gmail.com [shell-script]
2800:3f0:4001:817::200e
Conectando-se a google.com <http://google.com> (google.com <
http://google.com>)|216.58.202.206|:80...
Post by Rodrigo Cunha ***@gmail.com [shell-script]
conectado.
A requisição HTTP foi enviada, aguardando resposta... 301 Moved
Permanently
Post by Rodrigo Cunha ***@gmail.com [shell-script]
Localização: http://www.google.com/ [redirecionando]
for i in ${!vetor2[*]};do echo "${vetor2[i]}";done
--2018-08-24 20:29:57-- http://www.google.com/
Resolvendo www..google.com <http://www.google.com> <
http://www.google.com> (www.google.com <http://www.google.com>)...
Post by Rodrigo Cunha ***@gmail.com [shell-script]
64.233.190.147, 64.233.190.99, 64.233.190.105, ...
Conectando-se a www.google.com <http://www.google.com> (www.google.com
<http://www..google.com <http://www.google.com>>)|64.233.190.147|:80...
conectado.
Post by Rodrigo Cunha ***@gmail.com [shell-script]
A requisição HTTP foi enviada, aguardando resposta... 200 OK
Tamanho: não especificada [text/html]
Salvando em: “index.html.7”
0K .......... . 168K=0,07s
2018-08-24 20:29:58 (168 KB/s) - “index.html.7” salvo [11737]
Abraços Paulo
Post by Rodrigo Cunha ***@gmail.com [shell-script]
Olá srs, preciso de uma ajuda.
Quero criar um array onde o conteúdo de um stdout seja inserido
automaticamente em posições diferentes.
Post by Rodrigo Cunha ***@gmail.com [shell-script]
Post by Rodrigo Cunha ***@gmail.com [shell-script]
No exemplo abaixo, fiz um wget para o google e retornou um texto.
Quero
Post by Rodrigo Cunha ***@gmail.com [shell-script]
Post by Rodrigo Cunha ***@gmail.com [shell-script]
criar um array dinamico que insira dentro de cada posição todo
conteudo(em string) entre este padrão
Post by Rodrigo Cunha ***@gmail.com [shell-script]
Post by Rodrigo Cunha ***@gmail.com [shell-script]
"--2018-08-22 16:58:04--"
Pretendo inserir um vetor, no array em cada padrão e captura-lo por
uma Regex.
Post by Rodrigo Cunha ***@gmail.com [shell-script]
Post by Rodrigo Cunha ***@gmail.com [shell-script]
Comando: #wget google.com <http://google.com> <http://google.com>
--2018-08-22 16:58:04-- http://google.com/
Resolvendo google.com <http://google.com> <http://google.com> (
google..com <http://google.com> <http://google.com>
Post by Rodrigo Cunha ***@gmail.com [shell-script]
<http://google.com>)... 172.217.29.46,
Post by Rodrigo Cunha ***@gmail.com [shell-script]
2800:3f0:4004:808::200e
Conectando-se a google.com <http://google.com> <http://google.com> (
google.com <http://google.com>
Post by Rodrigo Cunha ***@gmail.com [shell-script]
<http://google.com>)|172.217.29.46|:80... conectado.
A requisição HTTP foi enviada, aguardando resposta..... 301 Moved
Permanently
Post by Rodrigo Cunha ***@gmail.com [shell-script]
Post by Rodrigo Cunha ***@gmail.com [shell-script]
Localização: http://www.google..com/ <http://www.google.com/>
[redirecionando]
Post by Rodrigo Cunha ***@gmail.com [shell-script]
Post by Rodrigo Cunha ***@gmail.com [shell-script]
--2018-08-22 16:58:06-- http://www.google.com/
Resolvendo www.google.com <http://www.google.com> <
http://www.google.com> (www.google.com
<http://www..google.com <http://www.google.com>> <http://www.google.com>)...
216.58.202.228,
Post by Rodrigo Cunha ***@gmail.com [shell-script]
Post by Rodrigo Cunha ***@gmail.com [shell-script]
2800:3f0:4004:806::2004
Conectando-se a www.google.com <http://www.google.com> <
http://www.google.com> (www.google.com
<http://www..google.com <http://www.google.com>>
Post by Rodrigo Cunha ***@gmail.com [shell-script]
Post by Rodrigo Cunha ***@gmail.com [shell-script]
<http://www.google.com>)|216.58.202.228|:80... conectado.
A requisição HTTP foi enviada, aguardando resposta..... 200 OK
Post by Rodrigo Cunha ***@gmail.com [shell-script]
Tamanho: não especificada [text/html]
Salvando em: “index.html.1”
--
Atenciosamente,
Rodrigo da Silva Cunha
São Gonçalo, RJ - Brasil
----------------------------------------------------------
----------------------------------------------------------
--
Atenciosamente,
Rodrigo da Silva Cunha
São Gonçalo, RJ - Brasil
----------------------------------------------------------
----------------------------------------------------------
--
Atenciosamente

Robson Alexandre
Rodrigo Cunha rodrigo.root.rj@gmail.com [shell-script]
2018-08-25 22:19:04 UTC
Permalink
Era isso mesmo Robson, obrigado.

Em sáb, 25 de ago de 2018 às 18:41, Robson Alexandre
Post by Robson Alexandre ***@gmail.com [shell-script]
Rodrigo,
não tenho certeza se compreendi o que exatamente vc pretende fazer, mas
--2018-08-22 16:58:04-- http://google.com/
Resolvendo google.com (google.com)... 172.217.29.46,
2800:3f0:4004:808::200e
Conectando-se a google.com (google.com)|172.217.29.46|:80... conectado.
A requisição HTTP foi enviada, aguardando resposta.... 301 Moved
Permanently
Localização: http://www.google..com/ <http://www.google.com/> [redirecionando]
--2018-08-22 16:58:06-- http://www.google.com/
Resolvendo www.google.com (www.google.com)... 216.58.202.228,
2800:3f0:4004:806::2004
Conectando-se a www.google.com (www.google.com)|216.58..202.228|:80...
conectado.
A requisição HTTP foi enviada, aguardando resposta... 200 OK
Tamanho: não especificada [text/html]
Salvando em: “index.html.1”
array[0]="--2018-08-22 16:58:04-- http://google.com/ Resolvendo
google.com (google.com)... 172.217.29.46, 2800:3f0:4004:808::200e
Conectando-se a google.com <http://google..com/> (google.com)|172.217.29.46|:80...
conectado. A requisição HTTP foi enviada, aguardando resposta.... 301 Moved
Permanently Localização: http://www.google..com/ <http://www.google.com/>
[redirecionando]"
array[1]="--2018-08-22 16:58:06- http://www.google.com/ Resolvendo
www.google.com (www.google.com)... 216.58.202.228,
2800:3f0:4004:806::2004 Conectando-se a www.google.com (www.google.com)|216.58.202.228|:80...
conectado. A requisição HTTP foi enviada, aguardando resposta.... 200 OK
Tamanho: não especificada [text/html] Salvando em: “index.html.1”"
stdout=$(wget google.com 2>&1)
mapfile array < <(sed 's/^--/#\n--/g; $a#' <<< "$stdout" | sed '/^--/{:a;
/#/!{N;ba}; s/\n/ /g}')
echo ${array[1]}
echo ${array[2]}
Em caso do gmail (des)formatar as linhas de comando deixei um termbin abaixo
http://termbin.com/dj58
Atenciosamente
Robson Alexandre
Post by 'Julio C. Neves' ***@gmail.com [shell-script]
Valeu Paulo,
essa página que vc citou foi escrita por mim mas como estava sem
atualização, tirei-a do ar, mas pelo visto ainda ficou um pedacinho... ;)
Não sei se essa é a dúvida do nosso colega, pois não a li, mas de qq
forma, vou colar aqui em baixo tudo que sei sobre o cmd mapfile que é um
builtin (e portanto muito veloz) que foi inserido a partir do Bash 4.0.
Espero que seja bastante útil...
Lendo um arquivo para um vetor
Ainda falando do *bash 4.0*, eis que ele surge com uma outra novidade: o
comando intrínseco (*built-in*) mapfile, cuja finalidade é ler linhas da
entrada primária (*stdin*) para dentro de um vetor indexado, sem fazer
*mapfile [OPCS] [VETOR]*
Onde os dados recebidos pela entrada primária irão para o vetor VETOR. Caso
ele não seja especificado, a variável do sistema, MAPFILE, se incumbirá
de receber esses dados.
Opção
Efeito
*-n QTD*
Copia, no máximo,* QTD *linhas
*-O ORIGEM*
Usa* ORIGEM *como o menor índice de* VETOR*
*-s QTD*
Descarta as primeiras* QTD *linhas
*-c QTD*
A cada* QTD *linhas lidas executa o que for especificado pela opção* -c*
*-C COD*
Executa o código *Shell* especificado em* COD. *O índice de* VETOR *é
adicionado ao final
-
EPA! Isso deve ser muito rápido!
-
*$ cat frutas **Não confunda o arquivo com o vetor que usamos*
abacate
maçã
morango
pera
tangerina
uva
*$ mapfile vet < frutas **Mandando frutas para vetor vet*
abacate maçã morango pera tangerina uva
*$ vet=($(cat frutas))*
Porém, isso seria mais lento porque a substituição de comando é executada
em um *subshell*. Uma outra forma de fazer isso que logo vem à cabeça é
ler o arquivo com a opção -a do comando read. Vamos ver como seria o
*$ read -a vet < frutas*
abacate
Como deu para perceber, foi lido somente o primeiro registro de frutas porque
esse formato de read precisa receber todos os dados que serão lidos para
*$ read -a vet <<< $(cat frutas)*
abacate maçã morango pera tangerina uva
Mas aí a performance será pior até do que a anterior, pois também usa
substituição de comandos e ainda por cima usa a instrução cat, que não é
*built-in*.
*$ mapfile -n3 vet < frutas **Para ler somente três linhas*
abacate maçã morango
0 1 2
*$ unset vet **"Mata" o vetor*
*$ mapfile vet < frutas **Começando de novo*
abacate maçã morango pera tangerina uva
0 1 2 3 4 5
*$ mapfile -O 6 vet < frutas **Menor índice será o que já tinha mais 1*
abacate maçã morango pera tangerina uva abacate maçã morango pera
tangerina uva
0 1 2 3 4 5 6 7 8 9 10 11
*$ unset vet*
*$ mapfile -s 3 vet < frutas **Despreza três linhas iniciais de frutas*
pera tangerina uva
0 1 2
*$ mapfile -c1 -C"echo carreguei o índice" < frutas*
carreguei o índice 0 abacate
carreguei o índice 1 maçã
carreguei o índice 2 morango
carreguei o índice 3 pera
carreguei o índice 4 tangerina
carreguei o índice 5 uva
*$ mapfile -c1 -C"printf 'carreguei o índice %d %s\n'" < frutas *
carreguei o índice 0
carreguei o índice 1
carreguei o índice 2
carreguei o índice 3
carreguei o índice 4
carreguei o índice 5
No entanto, poderíamos desprezar os índices, que são automaticamente
lançados para a saída, se não especificarmos a máscara do printf para
recebê-los (no caso %d e %s) Vamos aproveitar e tirar também o \n para
*$ mapfile -c1 -C"printf 'Carreguei o índice'" < frutas*
Carreguei o índiceCarreguei o índiceCarreguei o índiceCarreguei o
índiceCarreguei o índiceCarreguei o índice
Epa, isso me deu uma ideia! Posso simular uma barra de progresso rústica
*$ mapfile -c1 -C"printf '#'" < frutas*
######$
Nesses últimos exemplos, não especificamos o nome do vetor. Assim sendo,
abacate maçã morango pera tangerina uva
Isto é, foi lançado um jogo-da-velha (#) para cada elemento carregado no
vetor. Isso é muito legal, mas se a quantidade de elementos for muito
grande, a qualidade da apresentação será prejudicada. Para resolver isso,
basta incrementar o valor da opção -c. Observe também que o *prompt*
ficou colado na saída, sem saltar linha. Para resolver isso, o melhor é
colocar um echo puro no final da linha. Vamos ver como carregar um vetor
*$ printf '%s\n' {1..200} | mapfile -c20 -C 'printf "#"'; echo*
##########
Abraços,
Julio
*» Não tem tempo para fazer um curso presencial?*
*» Na sua cidade não tem nenhum bom curso de Linux?*
*» **Conheça nosso portal educacional e estude conosco: *
* http://www.dicas-l..com.br/educacao
<http://www.dicas-l.com.br/educacao/>*
*» Treinamento presencial (em 4 sábados) no RJ e BSB *
* em http://bit.ly/cursoshelljulioneves
<http://bit.ly/cursoshelljulioneves> *
*Também damos treinamento em sua empresa*
*em qualquer cidade**, **com certificado **e nota fiscal.*
​​
Carregar um arquivo em um array?
Post by ***@yahoo.com.br [shell-script]
http://wiki.softwarelivre.org/TWikiBar/TWikiBarTalkSnacks#Lendo_um_arquivo_para_um_vetor
Abraços Paulo
Post by Rodrigo Cunha ***@gmail.com [shell-script]
Em parte sim,na regex está perfeito, mas eu gostaria de declarar
apenas um array e colocar as diferentes
Post by Rodrigo Cunha ***@gmail.com [shell-script]
entradas em diferentes posições, mas com apenas um array.
__
Olá Rodrigo, veja se ajuda, não sei se entendi direito.
i=;while read linha; do
[[ "$linha" =~ --....-..-..\ ..:..:..-- ]] && { let i++;j=0;}
eval vetor$i[j++]="\$linha";done < <(wget google.com <
http://google.com> 2>&1)
Post by Rodrigo Cunha ***@gmail.com [shell-script]
for i in ${!vetor1[*]};do echo "${vetor1[i]}";done
--2018-08-24 20:29:57-- http://google.com/
Resolvendo google.com <http://google.com> (google.com <
http://google.com>)... 216.58.202.206,
Post by Rodrigo Cunha ***@gmail.com [shell-script]
2800:3f0:4001:817::200e
Conectando-se a google.com <http://google.com> (google.com <
http://google.com>)|216.58.202.206|:80...
Post by Rodrigo Cunha ***@gmail.com [shell-script]
conectado.
A requisição HTTP foi enviada, aguardando resposta... 301 Moved
Permanently
Post by Rodrigo Cunha ***@gmail.com [shell-script]
Localização: http://www.google.com/ [redirecionando]
for i in ${!vetor2[*]};do echo "${vetor2[i]}";done
--2018-08-24 20:29:57-- http://www.google.com/
Resolvendo www...google.com <http://www.google.com> <
http://www.google.com> (www.google.com <http://www.google.com>)...
Post by Rodrigo Cunha ***@gmail.com [shell-script]
64.233.190.147, 64.233.190.99, 64.233.190.105, ...
Conectando-se a www.google.com <http://www.google.com> (www.google.com
<http://www...google.com <http://www.google.com>>)|64.233.190.147|:80....
conectado.
Post by Rodrigo Cunha ***@gmail.com [shell-script]
A requisição HTTP foi enviada, aguardando resposta... 200 OK
Tamanho: não especificada [text/html]
Salvando em: “index.html.7”
0K .......... . 168K=0,07s
2018-08-24 20:29:58 (168 KB/s) - “index.html.7” salvo [11737]
Abraços Paulo
Post by Rodrigo Cunha ***@gmail.com [shell-script]
Olá srs, preciso de uma ajuda.
Quero criar um array onde o conteúdo de um stdout seja inserido
automaticamente em posições diferentes.
Post by Rodrigo Cunha ***@gmail.com [shell-script]
Post by Rodrigo Cunha ***@gmail.com [shell-script]
No exemplo abaixo, fiz um wget para o google e retornou um texto.
Quero
Post by Rodrigo Cunha ***@gmail.com [shell-script]
Post by Rodrigo Cunha ***@gmail.com [shell-script]
criar um array dinamico que insira dentro de cada posição todo
conteudo(em string) entre este padrão
Post by Rodrigo Cunha ***@gmail.com [shell-script]
Post by Rodrigo Cunha ***@gmail.com [shell-script]
"--2018-08-22 16:58:04--"
Pretendo inserir um vetor, no array em cada padrão e captura-lo por
uma Regex.
Post by Rodrigo Cunha ***@gmail.com [shell-script]
Post by Rodrigo Cunha ***@gmail.com [shell-script]
Comando: #wget google.com <http://google.com> <http://google.com>
--2018-08-22 16:58:04-- http://google.com/
Resolvendo google.com <http://google.com> <http://google.com> (
google...com <http://google.com> <http://google..com <http://google.com>
Post by Rodrigo Cunha ***@gmail.com [shell-script]
<http://google.com>)... 172.217.29.46,
Post by Rodrigo Cunha ***@gmail.com [shell-script]
2800:3f0:4004:808::200e
Conectando-se a google.com <http://google.com> <http://google.com> (
google.com <http://google.com>
Post by Rodrigo Cunha ***@gmail.com [shell-script]
<http://google.com>)|172.217.29.46|:80... conectado.
A requisição HTTP foi enviada, aguardando resposta...... 301 Moved
Permanently
Post by Rodrigo Cunha ***@gmail.com [shell-script]
Post by Rodrigo Cunha ***@gmail.com [shell-script]
Localização: http://www.google..com/ <http://www.google.com/>
[redirecionando]
Post by Rodrigo Cunha ***@gmail.com [shell-script]
Post by Rodrigo Cunha ***@gmail.com [shell-script]
--2018-08-22 16:58:06-- http://www.google.com/
Resolvendo www.google.com <http://www.google.com> <
http://www.google.com> (www.google.com
<http://www...google.com <http://www.google.com>> <
http://www.google.com>)... 216.58.202.228,
Post by Rodrigo Cunha ***@gmail.com [shell-script]
Post by Rodrigo Cunha ***@gmail.com [shell-script]
2800:3f0:4004:806::2004
Conectando-se a www.google.com <http://www.google.com> <
http://www.google.com> (www.google.com
<http://www...google.com <http://www.google.com>>
Post by Rodrigo Cunha ***@gmail.com [shell-script]
Post by Rodrigo Cunha ***@gmail.com [shell-script]
<http://www.google.com>)|216.58.202.228|:80... conectado.
A requisição HTTP foi enviada, aguardando resposta...... 200 OK
Post by Rodrigo Cunha ***@gmail.com [shell-script]
Tamanho: não especificada [text/html]
Salvando em: “index.html.1”
--
Atenciosamente,
Rodrigo da Silva Cunha
São Gonçalo, RJ - Brasil
----------------------------------------------------------
----------------------------------------------------------
--
Atenciosamente,
Rodrigo da Silva Cunha
São Gonçalo, RJ - Brasil
----------------------------------------------------------
----------------------------------------------------------
--
Atenciosamente
Robson Alexandre
--
Atenciosamente,
Rodrigo da Silva Cunha
São Gonçalo, RJ - Brasil
Loading...