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 is a backend software engineer at Matrice.ai.
LinkedIn