Como Ler Um Arquivo Linha Por Linha 2269 m15hxs

4
Como ler um arquivo linha por linha Junho 2014 Como ler um arquivo linha por linha Preâmbulo Loop WHILE Sintaxe Exemplo Dicas Vantagem Loop FOR Sintaxe Preâmbulo Um dos erros mais comuns no aprendizado dos scripts "bash" no GNU/LInux para ler um arquivo, 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 é o objetivo da coisa... Exemplo de saída com o ciclo vicioso "FOR" : for line in $(cat file.txt); do echo "$line" ; done Esta é a linha 1 Esta é a linha 2 Esta [...]

description

Shell Script

Transcript of Como Ler Um Arquivo Linha Por Linha 2269 m15hxs

Page 1: 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 [...]

Page 2: Como Ler Um Arquivo Linha Por Linha 2269 m15hxs

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):

Page 3: Como Ler Um Arquivo Linha Por Linha 2269 m15hxs

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

Page 4: Como Ler Um Arquivo Linha Por Linha 2269 m15hxs

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.