Lendo um arquivo para um vetor
Por Júlio Cezar Neves
Data de Publicação: 21 de Janeiro de 2010
Ainda falando do Bash 4.0, eis que ele surge com uma outra novidade: o comando intrínseco (builtin) mapfile, cuja finalidade é jogar um arquivo de texto inteiro para dentro de um vetor, sem loop ou substituição de comando.
-- EPA! Isso deve ser muito rápido!
-- E é. Faça os teste e comprove!
Exemplo:
$ cat frutas
abacate
maçã
morango
pera
tangerina
uva
$ mapfile vet < frutas # Mandando frutas para vetor vet
$ echo ${vet[@]} # Listando todos 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.
Veja a relação completa dos artigos da coluna Cantinho do Shell
Para se manter atualizado sobre as novidades desta coluna, consulte sempre o newsfeed RSS
Para saber mais sobre RSS, leia o artigo O Padrão RSS - A luz no fim do túnel.
Opinião dos Leitores
12 Fev 2010, 14:41
como em linux todo dia a gente aprende alguma coisa, essa valeu o dia :)
11 Fev 2010, 12:03
$ du -sh arquivo.txt
128K arquivo.txt
$ time mapfile vet < arquivo.txt
real 0m0.009s
user 0m0.003s
sys 0m0.000s
$ time vet=($(cat arquivo.txt))
real 0m0.110s
user 0m0.090s
sys 0m0.003s



