Comment lire un fichier ligne par ligne en utilisant Bash

Suraj Joshi 7 octobre 2020
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.

Auteur: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

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

LinkedIn