Acesso direto ao conteúdo

Busca

Visite também: Segurança Linux ·  UnderLinux ·  VivaOLinux ·  LinuxSecurity ·  NoticiasLinux ·  BR-Linux ·  SoftwareLivre.org ·  [mais]   
 

você está aqui: Home  → Colunistas  →  Cantinho do Shell

 

 

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

Formato PDF
Newsfeed RSS
Formato para impressão
PDF RSS Imprimir
  • Currently 3.22/5
  • 1
  • 2
  • 3
  • 4
  • 5

Avaliação: 3.2 /5 (49 votos)


Para se manter atualizado sobre as novidades desta coluna, consulte sempre o newsfeed RSS

Cantinho do Shell 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

cavassin
12 Fev 2010, 14:41
excelente dica!
como em linux todo dia a gente aprende alguma coisa, essa valeu o dia :)
Pablo Hess
11 Fev 2010, 12:03
Testei as duas técnicas, e a nova é bem mais rápida mesmo:

$ 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
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script

Bombando o Shell - Caixa de Ferramentas Gráficas do Shell Linux></A>
</div>
<div align=center>
<!--
<a href='http://www.idph.net/inglesonline/inscricao.shtml' target='_blank'><img src='http://www.dicas-l.com.br/imagens/InglesOnline.jpg' border='0' alt=''></a><BR><BR>-->
<A HREF=http://iol.idph.com.br rel=

 

 

Procure pela casa ou apartamento ideal à venda ou para aluguel na busca inteligente do Imohoo
Buscar imóveis