Como Ler Um Arquivo Linha Por Linha 2269 m15hxs
-
Upload
junior-medeiros -
Category
Documents
-
view
7 -
download
0
description
Transcript of Como Ler Um Arquivo Linha Por Linha 2269 m15hxs
Como ler um arquivo linha por linhaJunho 2014
Como ler um arquivo linha por linhaPreâmbuloLoop WHILE
SintaxeExemploDicasVantagem
Loop FORSintaxe
Preâmbulo
Um dos erros mais comuns no aprendizado dos scripts "bash" no GNU/LInux para ler umarquivo, linha por linha, é usar um loop "FOR" (for line in $(cat file.txt); do ...), que neste exemplo,leva a uma avaliação, não de cada linha do arquivo mas, de cada palavra ! O que não é oobjetivo da coisa... Exemplo de saída com o ciclo vicioso "FOR" :
for line in $(cat file.txt); do echo "$line" ; done Esta é a linha n° 1 Esta é a linha n° 2 Esta [...]
A solução consiste em utilizar um loop " WHILE " ligado ao comando interno "READ". Noentanto, você pode obter o mesmo resultado com um loop "For", mas você deverá trocar o valorda variável "$IFS" (Internal Field Separator, separador do campo interno) antes de executar oloop. Isto é o que veremos a seguir...
Loop WHILE
O loop " WHILE " continua a ser o método mais prático e simples para ler um arquivo, linha porlinha.
Sintaxe
while read linha de comando done < arquivo
Exemplo
O arquivo de origem :
Esta é a linha n° 1 Esta é a linha n° 2 Esta é a linha n° 3 Esta é a linha n° 4 Esta é a linha n° 5
As instruções em linha de comando:
while read line; do echo -e "$linen"; done < file.txt
ou em um script "bash" :
#! /bin/bash
while read line do echo -e "$linen" done < file.txt
Saída na tela (stdout):
Esta é a linha n° 1
Esta é a linha n° 2
Esta é a linha n° 3
Esta é a linha n° 4
Esta é a linha n° 5
Dicas
Você pode, a partir de um arquivo bem estruturado (como um caderno de endereços ou/etc/passwd por exemplo), recuperar os valores de cada campo e distribuí-los à diversasvariáveis com o comando "read". No entanto, não esqueça de definir a variável "IFS", oseparador de campo correto (espaço padrão). Exemplo :
#! /bin/bash
while IFS=: read user pass uid gid full home shell do echo -e "$full :n Pseudo : $usern UID :t $uidn GID :t $gidn Home :t $homen Shell :t $shellnn" done < /etc/passwd
Vantagem
while read i; do echo -e "Configuração : $i"; done < <(echo -e "anabnc")
Loop FOR
Apesar do loop "while" ser o método mais simples, ele tem uma grande desvantagem, ou seja,ele anula a formatação das linhas e, principalmente, dos espaços e tabulações ! Felizmente, oloop "FOR" associado a uma mudança do IFS permite manter a estrutura do documento desaída.
Sintaxe
oldIFS=$IFS # backup do separador de campo IFS=$'n' # novo separador de campo, o caractere de fim de linha for ligne in $(cat arquivo) do comando done IFS=$old_IFS # restabelecimento do separador de campo padrão
Tradução feita por Lucia Maurity y Nouira
Este documento, intitulado « Como ler um arquivo linha por linha »a partir de Kioskea (pt.kioskea.net) estádisponibilizado sob a licença Creative Commons. Você pode copiar, modificar cópias desta página, nas condiçõesestipuladas pela licença, como esta nota aparece claramente.