Lesen Sie eine Datei mit Bash in ein Array ein
-
Verwenden Sie die
readarray
-Methode, um eine Datei mit Bash in ein Array einzulesen - Verwenden Sie die allgemeine Methode, um eine Datei mit Bash in ein Array einzulesen
Dieses Tutorial behandelt einige Methoden zum Lesen von Zeilen aus einer Datei und zum Laden dieser Zeilen in ein Array mit Bash.
Zuerst sehen wir uns die Methode readarray
an. Danach werden wir einen allgemeineren Ansatz zum Einlesen einer Datei in ein Bash-Array untersuchen.
Verwenden Sie die readarray
-Methode, um eine Datei mit Bash in ein Array einzulesen
Das readarray
ist eine Funktion, die mit Bash 4.0 geliefert wird. Diese Methode sollte für alle Bash-Versionen größer als 4.0 funktionieren.
Wenn Sie sehen möchten, welche Version von Bash Sie gerade ausführen, können Sie den folgenden Befehl verwenden:
echo ${Bash_VERSION}
Wenn Ihre Version für Bash kleiner als 4.0 ist, können Sie zur nächsten Methode springen, da readarray
für Sie nicht funktioniert.
Wir verwenden für alle unsere Beispiele eine Datei mit dem Namen numbers.txt
mit folgendem Inhalt.
Die Datei numbers.txt
:
1 1
2 1
3 1
4 1
5 1
6 1
7 1
8 1
9 1
10 1
Die Syntax zum Lesen dieser Datei und Speichern ihres Inhalts in einem Array lautet wie folgt:
readarray -t Arr < numbers.txt
Wenn wir die Syntax aufschlüsseln, haben wir readarray
als Namen des Befehls, -t
entfernt die newline
-Zeichen und Arr
ist der Name des Arrays, in das der Dateiinhalt geschrieben wird. numbers.txt
ist der Name der Datei, die wir lesen wollen.
Es ist zu beachten, dass, wenn sich die einzulesende Datei nicht im selben Ordner wie Ihr Skript befindet, der vollständige Pfad zur Datei angegeben werden sollte.
Der Inhalt dieses Arrays kann wie im folgenden Beispiel ausgelesen werden:
echo ${Arr[1]}
Der obige Code gibt die Zeile im Index 1
des Arrays aus, was die zweite Zeile der Datei ist.
Die Ausgabe ist:
2 1
Verwenden Sie die folgende Syntax, um das gesamte Array auszudrucken:
echo ${Arr[@]}
Die Ausgabe dafür wird sein:
1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 1 10 1
Verwenden Sie die allgemeine Methode, um eine Datei mit Bash in ein Array einzulesen
Die Syntax für die allgemeine Methode lautet wie folgt:
IFS=$'\r\n' GLOBIGNORE='*' command eval 'ArrName=($(cat filename))'
Das Lesen dieses Arrays hat eine ähnliche Syntax wie im vorherigen Beispiel:
echo ${ArrName[1]}
Die obige Bash-Zeile zeigt den Inhalt im Index 1
des Arrays an. Wenn wir jedoch den Inhalt des gesamten Arrays anzeigen möchten, können wir Folgendes verwenden:
echo ${ArrName[@]}
Beschreibung der allgemeinen Methode
Der ArrName
in der allgemeinen Syntax ist der Name des Arrays, während der filename
nach dem cat
der Name der auszulesenden Datei ist. Wir werden diese beiden Variablen für unsere benutzerdefinierte Verwendung modifizieren.
Das IFS
definiert die Trennzeichen, in diesem Fall \r
und \n
. Das \r
ist der Wagenrücklauf und \n
ist das Zeilenvorschubzeichen.
In den meisten modernen Systemen wird \n
als Zeilenumbruchzeichen verwendet.
Das GLOBIGNORE='*'
wird als Sicherheit gesetzt, um seltsame Grenzfälle mit Dateinamen zu vermeiden. Es ist zu beachten, dass dieser Befehl aufgrund der Verwendung von GLOBIGNORE
Bash erfordert (und möglicherweise nicht unbedingt mit anderen Shells wie zsh
oder fish
funktioniert).
Ein weiterer wesentlicher Punkt ist, dass diese Lösung deutlich langsamer ist als readarray
. Der einzige Grund, dies zu verwenden, ist, wenn Ihre Bash-Version älter als Version 4.0 ist.