Wie man eine Datei Zeile für Zeile mit Bash liest

Suraj Joshi 22 Januar 2022
Wie man eine Datei Zeile für Zeile mit Bash liest

Wir können in der Bash mit mehreren Situationen konfrontiert werden, in denen wir die in einer Datei gespeicherten Daten Zeile für Zeile verarbeiten müssen. In solchen Fällen müssen wir den Inhalt der Datei lesen. Wir verwenden den Befehl read in der Bash, um eine Datei Zeile für Zeile zu lesen.

Lesen der Datei Zeile für Zeile in der Bash

Syntax

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

Es liest den Inhalt der Datei Dateiname Zeile für Zeile ein und gibt die Zeilen nacheinander im Terminal aus. Die Schleife wird ausgeführt, bis wir das Ende der Datei erreichen. Das IFS wird auf die Null-Zeichenkette gesetzt, was dazu beiträgt, führende und abschließende Leerzeichen beizubehalten.

Alternativ kann der obige Befehl auch durch den folgenden Befehl innerhalb einer einzigen Zeile ersetzt werden:

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

Beispiel: Lesen der Datei Zeile für Zeile in Bash

In diesem Beispiel lesen wir die Datei file.txt, die in jeder Zeile Zahlen enthält, und finden dann die Summe aller Zahlen in der Datei.

Inhalt der Datei 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"

Ausgabe:

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

Es liest die Zahlen Zeile für Zeile aus einer Datei namens file.txt und summiert dann alle diese Zahlen zusammen und gibt schließlich die Summe aus.

Beispiel: Felder in Dateien auf Variablen setzen

Wir können Felder in der Datei auf Variablen setzen, indem wir mehrere Variablen an den Befehl read übergeben, der Felder innerhalb einer Zeile auf der Grundlage des Wertes von IFS trennt.

Inhalt der Datei 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

Ausgabe:

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!

Hier wird jede Zeile in der Datei in zwei Segmente unterteilt, da wir zwei Variablen an den Befehl read übergeben haben. Das erste Segment wird der Variable name zugewiesen, die sich vom Anfang der Zeile bis zum ersten - erstreckt, und der verbleibende Teil wird der Variable earnings zugewiesen.

Alternative Methoden zum Lesen von Dateien in der Bash

#!/bin/bash

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

Ausgabe:

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!

Hier wird der Dateiname file.txt als Ausgabe des Befehls cat an das Programm übergeben.

Suraj Joshi avatar Suraj Joshi avatar

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

LinkedIn