Comment lire un fichier ligne par ligne en utilisant Bash
Nous pouvons être confrontés à plusieurs situations dans Bash, où nous devons traiter les données stockées dans un fichier ligne par ligne. Dans ce cas, nous devons lire le contenu du fichier. Nous utilisons la commande read
en Bash pour lire un fichier ligne par ligne.
Lire le fichier ligne par ligne en Bash
Syntaxe
while IFS= read -r line
do
echo "$line"
done < file_name
Il lit le contenu du fichier file_name
une ligne à la fois et imprime les lignes une par une dans le terminal. La boucle est exécutée jusqu’à ce que l’on atteigne la fin du fichier. Le IFS
est réglé sur la chaîne nulle, ce qui permet de conserver les espaces avant et arrière.
La commande ci-dessus peut également être remplacée par la commande suivante à l’intérieur d’une seule ligne:
while IFS= read -r line; do echo $line; done < file_name
Exemple: Lire le fichier ligne par ligne en mode Bash
Dans l’exemple, nous allons lire le fichier file.txt
, qui contient des nombres dans chaque ligne, puis nous trouverons la somme de tous les nombres dans le fichier.
Contenu du fichier 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"
Production:
The numbers in the file are:
1
5
6
7
8
The sum of the numbers in the file is:27
Il lit les nombres ligne par ligne à partir d’un fichier nommé file.txt
et ensuite additionne tous ces nombres et finalement fait l’écho de la somme.
Exemple: Définir les champs des fichiers comme des variables
Nous pouvons définir des champs dans le fichier comme des variables en passant plusieurs variables à la commande read
, qui séparera les champs d’une même ligne en fonction de la valeur de IFS
.
Contenu du fichier 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
Production:
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!
Ici, chaque ligne du fichier est divisée en deux segments car nous avons passé deux variables à la commande read
. Le premier segment sera attribué à la variable name
, qui s’étend du début de la ligne jusqu’au premier -
, et la partie restante sera attribuée à la variable earnings
.
Autres méthodes de lecture de fichiers en mode Bash
#!/bin/bash
while IFS=- read -r name earnings
do
echo "$name" has made earnings of "$earnings" pounds today!
done < <(cat file.txt )
Production:
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!
Ici, le nom de fichier file.txt
est passé au programme comme sortie de la commande cat
.
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn