|
From: | Rodrigo Cunha |
Subject: | Re: [shell-script] Criar variaveis através de um loop/Array |
Date: | Mon, 6 Apr 2015 12:15:16 -0300 |
Tempo de execução do script 2 :Tempo de execução do script 1 :Script2 :Script 1 :A diferença de tempo de execução foi gritante.Veja, criei um arquivo com 10 mil linhas e fiz o mesmo procedimento em ambos os casos para o script:
root@pc-casa:/STORAGE/git.d/shell.d/Snif alias# cat deposito.lista-ip.txt|wc
10000 10000 48894
root@pc-casa:/STORAGE/git.d/shell.d/Snif alias#
#!/bin/bash
#Autor Rodrigo Silva
contador=$(cat deposito.lista-ip.txt |wc|awk '{print $1}')
for linha in $(cat deposito.lista-ip.txt)
do
aux=( ${aux[@]} $linha )
done
for (( i=0; i<=$contador; i++ ))
do
echo ${aux[$i]}
done
#!/bin/bash
#Autor Rodrigo Silva
contador=($(cat deposito.lista-ip.txt))
echo ${contador[@]}
real 1m8.223s
user 1m8.046s
sys 0m0.179s
real 0m0.035s
user 0m0.026s
sys 0m0.011sEm 6 de abril de 2015 10:17, Rodrigo Cunha <address@hidden> escreveu:Valeu Júlio, vou fazer o teste e posto aqui.Obrigado srs.Em 5 de abril de 2015 21:13, 'Julio C. Neves' address@hidden [shell-script] <address@hidden> escreveu:Fala Rodrigo,se eu entendi, vc deseja colocar uma variável como índice de um vetor. Isso é simples, basta vc fazer echo ${vet[var]}. Não precisa sequer do $ precedendo a variável, pois a interpretação feita dentro dos colchetes é sempre matemática. Vc pode por exemplo fazer echo ${vet[3*2]} que ele listará vet[6].$ vet=({a..m})
$ echo ${vet[@]}
a b c d e f g h i j k l m
$ echo ${vet[3*2]}
g
$ echo ${vet[2+1]}
dOlha:
$ unset var # Matei var
$ echo ${vet[1+var]} # Como var não existe, será substituída por zero para evitar erro
b
$ echo $var # Ainda não existe
$Agora o mais importante: o processo que vc usou para criar o vetor foi o pior possível. Existem outros bem melhores:
1.===================$ vet=($(cat list-snif-alias.sh))
2.===================$ read -a vet < list-snif-alias.sh
3.===================A partir do Bash 4.0 foi introduzido o builtin map file que lê direto de um arquivo para um vetor. Esse processo é disparado o mais veloz e mais eficiente de todos os outros
$ mapfile vet < list-snif-alias.shSe esse teu arquivo tem mais de 100 registros, por favor meça o tempo das soluções (incluindo a sua) e coloque aqui na lista para todos verem e aprenderem esse macete.:(, no meu caso eu preciso usar o loop para uma posterior execução de um acesso ssh para cada ip cadastrado.funcionou legal, como eu faço para jogar um loop aqui para uma hipotética variavel $x no lugar do numero 1.
echo ${aux$[x]}Em 5 de abril de 2015 16:13, Rodrigo Cunha <address@hidden> escreveu:Vlw Robson, vou testar e te aviso.
:)--Em 5 de abril de 2015 13:07, Robson Alexandre address@hidden [shell-script] <address@hidden> escreveu:Robson AlexandreRodrigo,Atenciosamente
Nesse caso é melhor usar o array mesmo. Substitua o script por
for linha in $(cat list-snif-alias.sh)
do
aux=( ${aux[@]} $linha )
done
e cada posição que vc queira acessar é só fazer:
echo ${aux[1]}Em dom, 5 de abr de 2015 às 11:02, Rodrigo Cunha address@hidden [shell-script] <address@hidden> escreveu:Olá srs, estou criando um script que cria uma variavel para cada ip de um arquivo.Pensei em duas opções, criar um array ou criar um loop com o for para o numero de linhas do arquivo.Exemplo :
Nome do arquivo : list-snif-alias.shcat list-snif-alias.sh192.168.0.10
192.168.0.11
Script :
#!/bin/bash
contador=$(cat list-snif-alias.sh |wc|awk '{print $1}')
export contador
for (( i=1; i<=$contador; i++ ))
do
aux_${i}=$(head -n${i} list-snif-alias.sh |tail -1)
echo $aux_${i}
done
echo ""O problema é que meu retorno, ao invés de exibir apenas o ip contido dentro da variavel, ele me retorna um resultado diferente :
./evento.leararquivo.sh: line 8: aux_1=192.168.0.10: command not found
1
./evento.leararquivo.sh: line 8: aux_2=192.168.0.11: command not found
2
--Atenciosamente,
Rodrigo da Silva CunhaAtenciosamente,
Rodrigo da Silva Cunha
--Atenciosamente,
Rodrigo da Silva Cunha
--Atenciosamente,
Rodrigo da Silva Cunha
--Atenciosamente,
Rodrigo da Silva Cunha
--Atenciosamente,
Rodrigo da Silva Cunha
[Prev in Thread] Current Thread [Next in Thread]
- Criar variaveis através de um loop/Array, Rodrigo Cunha, 2015/04/05
- Re: [shell-script] Criar variaveis através de um loop/Array, Robson Alexandre, 2015/04/05
- Re: [shell-script] Criar variaveis através de um loop/Array, Rodrigo Cunha, 2015/04/05
- Re: [shell-script] Criar variaveis através de um loop/Array, Rodrigo Cunha, 2015/04/05
- Re: [shell-script] Criar variaveis através de um loop/Array, Robson Alexandre, 2015/04/05
- Re: [shell-script] Criar variaveis através de um loop/Array, Julio C. Neves, 2015/04/05
- Re: [shell-script] Criar variaveis através de um loop/Array, Rodrigo Cunha, 2015/04/06
- Re: [shell-script] Criar variaveis através de um loop/Array, Rodrigo Cunha, 2015/04/06
- Re: [shell-script] Criar variaveis através de um loop/Array, Rodrigo Cunha <=
- Re: [shell-script] Criar variaveis através de um loop/Array, Julio C. Neves, 2015/04/06
- Re: [shell-script] Criar variaveis através de um loop/Array, Rodrigo Cunha, 2015/04/06
- Prev by Date: Re: [shell-script] Criar variaveis através de um loop/Array
- Next by Date: Re: [shell-script] Criar variaveis através de um loop/Array
- Previous by thread: Re: [shell-script] Criar variaveis através de um loop/Array
- Next by thread: Re: [shell-script] Criar variaveis através de um loop/Array
- Index(es):