Lesen Sie eine Datei mit Bash in ein Array ein

Faaiq Bilal 20 Juni 2023
  1. Verwenden Sie die readarray-Methode, um eine Datei mit Bash in ein Array einzulesen
  2. Verwenden Sie die allgemeine Methode, um eine Datei mit Bash in ein Array einzulesen
Lesen Sie eine Datei mit Bash in ein Array ein

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.

Verwandter Artikel - Bash File