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