Como ler um arquivo linha por linha usando o Bash

Suraj Joshi 1 novembro 2020
Como ler um arquivo linha por linha usando o Bash

Podemos enfrentar várias situações em Bash, onde precisamos processar os dados armazenados em um arquivo linha por linha. Nesses casos, precisamos ler o conteúdo do arquivo. Utilizamos o comando read em Bash para ler um arquivo linha por linha.

Ler o arquivo linha por linha em Bash

Sintaxe

while IFS= read -r line
do
  echo "$line"
done < file_name

Ele lê o conteúdo do arquivo file_name uma linha de cada vez e imprime as linhas uma a uma no terminal. O laço é executado até chegarmos ao final do arquivo. O IFS é definido para a string nula, o que ajuda a manter os espaços brancos de liderança e de retaguarda.

Alternativamente, o comando acima também pode ser substituído pelo seguinte comando dentro de uma única linha:

while IFS= read -r line; do echo $line; done < file_name

Exemplo: Leia o arquivo linha por linha em Bash

No exemplo, vamos ler o arquivo file.txt, que contém números em cada linha e depois encontraremos a soma de todos os números no arquivo.

Conteúdo do arquivo file.txt

1
5
6
7
8
10
#!/bin/bash

sum=0
echo "The numbers in the file are:"
while IFS= read -r line
do
  echo "$line"
  sum=$(( $sum + $line ))
done < file.txt
echo "The sum of the numbers in the file is:$sum"

Resultado:

The numbers in the file are:
1
5
6
7
8
The sum of the numbers in the file is:27

Ela lê os números linha por linha de um arquivo chamado file.txt e então resume todos esses números e finalmente ecoa a soma.

Exemplo: Definir Campos em Arquivos para Variáveis

Podemos definir campos no arquivo como variáveis passando múltiplas variáveis para o comando read, que separará os campos dentro de uma linha com base no valor de IFS.

Conteúdo do file.txt

Rohit-10
Harish-30
Manish-50
Kapil-10
Anish-20
#!/bin/bash

while IFS=- read -r name earnings
do
    echo "$name" has made earnings of "$earnings" pounds today!
done < file.txt

Resultado:

Rohit has made earnings of 10 pounds today!
Harish has made earnings of 30 pounds today!
Manish has made earnings of 50 pounds today!
Kapil has made earnings of 10 pounds today!

Aqui, cada linha no arquivo é dividida em dois segmentos, pois passamos duas variáveis para o comando read. O primeiro segmento será atribuído à variável name, que se estende desde o início da linha até o primeiro -, e a parte restante será atribuída à variável earnings.

Métodos alternativos para ler arquivos em Bash

#!/bin/bash

while IFS=- read -r name earnings
do
    echo "$name" has made earnings of "$earnings" pounds today!
done < <(cat file.txt )

Resultado:

Rohit has made earnings of 10 pounds today!
Harish has made earnings of 30 pounds today!
Manish has made earnings of 50 pounds today!
Kapil has made earnings of 10 pounds today!

Aqui, o nome do arquivo file.txt é passado para o programa como uma saída do comando cat.

Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn