CSV Dateien richtig interpretieren und erzeugen, Teil 1
Inhaltsverzeichnis:
- Lesen einer Datei Zeile für Zeile Syntax
- Lesen einer Datei Zeile für Zeile Beispiele
- Alternative Methoden zum Lesen von Dateien
- Prozessersetzung verwenden
- Verwenden eines Here-Strings
- Dateideskriptor verwenden
- Fazit
Beim Schreiben von Bash-Skripten befinden Sie sich manchmal in Situationen, in denen Sie eine Datei zeilenweise lesen müssen. Beispielsweise verfügen Sie möglicherweise über eine Textdatei, die Daten enthält, die vom Skript verarbeitet werden sollen.
In diesem Tutorial erfahren Sie, wie Sie eine Datei zeilenweise in Bash lesen.
Lesen einer Datei Zeile für Zeile Syntax
Die allgemeinste Syntax zum zeilenweisen Lesen einer Datei lautet wie folgt:
while IFS= read -r line do echo "$line" done < input_file
oder die entsprechende einzeilige Version:
while IFS= read -r line; do echo $line; done < input_file
Wie funktioniert es?
Die Eingabedatei (
input_file
) ist der Name der Datei, die vom
input_file
zum Lesen geöffnet werden soll. Der Befehl
read
liest die Datei zeilenweise und weist jede Zeile der Zeilenvariablen zu. Sobald alle Zeilen abgearbeitet sind, endet die while-Schleife. Das interne Feldtrennzeichen (
IFS
) wird auf die Nullzeichenfolge festgelegt, um das führende und nachfolgende Leerzeichen beizubehalten, das das Standardverhalten des Lesebefehls ist.
Lesen einer Datei Zeile für Zeile Beispiele
Schauen wir uns das folgende Beispiel an. Angenommen, wir haben eine Datei mit dem Namen
distros.txt
die eine Liste der beliebtesten Linux-Distributionen und ihrer Paketmanager enthält, die durch Komma (
,
) getrennt sind:
Ubuntu, apt Debian, apt CentOS, yum Arch Linux, pacman Fedora, dnf
Um die Datei zeilenweise zu lesen, führen Sie den folgenden Code in Ihrem Terminal aus:
while IFS= read -r line do echo "$line" done < distros.txt
Der Code liest die Datei zeilenweise, weist jede Zeile einer Variablen zu und gibt die Variable zurück. Grundsätzlich sehen Sie die gleiche Ausgabe, als würden Sie den Dateiinhalt mit dem Befehl cat anzeigen.
Was ist, wenn Sie nur die Distributionen drucken möchten, die apt verwenden? Eine Möglichkeit wäre, die if-Anweisung zu verwenden und zu überprüfen, ob die Zeile den apt-Teilstring enthält:
while IFS= read -r line do if]; then echo "$line" fi done < distros.txt
Ubuntu, apt Debian, apt
Wenn Sie eine Datei zeilenweise lesen, können Sie auch mehr als eine Variable an den Befehl read übergeben, wodurch die Zeile auf der Grundlage des
IFS
in Felder aufgeteilt wird. Das erste Feld wird der ersten Variablen, das zweite der zweiten Variablen usw. zugewiesen. Wenn mehr Felder als Variablen vorhanden sind, werden die verbleibenden Felder der letzten Variablen zugewiesen.
Im folgenden Beispiel setzen wir IFS auf ein Komma (
,
) und übergeben zwei Variablen
distro
und
pm
an den Befehl read. Alles vom Zeilenanfang bis zum ersten Komma wird der ersten Variablen (
distro
) und der Rest der Zeile der zweiten Variablen (
pm
) zugewiesen:
while IFS=, read -r distro pm do echo "$pm" is the package manager for "$distro" done < distros.txt
apt is the package manager for Ubuntu apt is the package manager for Debian yum is the package manager for CentOS pacman is the package manager for Arch Linux dnf is the package manager for Fedora
Alternative Methoden zum Lesen von Dateien
Prozessersetzung verwenden
Mit der Prozessersetzung können Sie die Ausgabe des Befehls als Dateinamen übergeben:
while IFS= read -r line do echo "$line" done < <(cat input_file)
Verwenden eines Here-Strings
Here String ist eine Variante von Here document. Die Zeichenfolge
(cat input_file)
behält die Zeilenumbrüche bei:
while IFS= read -r line do echo "$line" done <<< $(cat input_file)
Dateideskriptor verwenden
Sie können die Eingabe für die Schleife auch mithilfe eines Dateideskriptors bereitstellen:
while IFS= read -r -u9 line do echo "$line" done 9< input_file
Verwenden Sie beim Arbeiten mit Dateideskriptoren eine Zahl zwischen 4 und 9, um Konflikte mit den internen Dateideskriptoren der Shell zu vermeiden.
Fazit
In Bash können wir eine Datei zeilenweise lesen, indem wir den Dateinamen als Eingabe für eine while-Leseschleife bereitstellen.
Bash-TerminalKann nicht mehr als eine Datei oder ein Ordner ausgewählt werden. Unter Windows können nicht mehr als eine Datei oder ein Ordner ausgewählt werden.
Dieser Beitrag hilft Ihnen, wenn Sie nicht mehrere Dateien oder Ordner auswählen können Zeit, entweder mit Select All oder Strg + A Tastaturkombination in Windows 10/8/7.
Wie man wie ein Profi von einem Eins-zu-Eins liest
Für Leser, die die Grundlagen des perfekten Lesens auf ihren Android-Geräten nicht kennen, haben wir eine personalisierte Erfahrung aus erster Hand, die nur für Sie beschrieben wurde.
Wie man kostenlose E-Books für den PC einrichtet und liest
Erfahren Sie, wie Sie kostenlose E-Books auf Ihrem Kindle für PC einrichten und lesen.