Ich bin neu im Bash-Scripting und habe derzeit ein kleines Problem bei der Arbeit mit for-Schleifen, Arrays und Variablenzuweisung/-ersetzung, das ich nicht lösen kann. Da ich buchstäblichneu, ich weiß nicht einmal, wie ich das nachschlagen soll. Obwohl das jeder sagen könnte, möchte ich betonen, dass dies keine Hausaufgaben oder ähnliches sind - ich muss nur eine riesige Menge an Daten für die spätere Verarbeitung neu organisieren und dachte, ich würde das in einer etwasschlauWeg, während Sie etwas Bash lernen.
Hintergrund: Ich habe ein Verzeichnis, das selbst drei Unterverzeichnisse enthält - Ordner1, Ordner2, Ordner3. Jedes Unterverzeichnis hateinsdata.txt-Datei. Jede data.txt-Datei enthält drei Spalten mit einer festen Anzahl von Zeilen.
Ziel: Ich möchte aus dem Hauptverzeichnis ein Bash-Skript starten, das die Unterverzeichnisse durchläuft und folgendes ausführt:
- es gibt die Datei data.txt ein und greift darauf zu;
- es liest jede Spalte in das entsprechende Array
arr1
,arr2
,arr3
(diese werden beim Wechsel in das nächste Unterverzeichnis geleert/zurückgesetzt); - es liest
arr2[0]
inearr1
,arr2[1]
inearr2
, ...,arr2[j-1]
inearr$j
. Eine ähnliche Struktur wird für die Daten in befolgtarr3
. Dieearr$j
behalten die Daten aus früheren Iterationen und bilden meine gewünschten Ausgabearrays. Bei jedem Durchlauf eines neuen Verzeichnisses werden Daten an diese angehängt.
Das klingt übertrieben kompliziert, aber das ist die Struktur der Daten, mit denen ich arbeiten muss. Zum größten Teil habe ich eine funktionierende Lösung gefunden (zugegeben, wahrscheinlich nicht die beste).
Problem: Aus einem Grund, den ich nicht identifizieren kann, erhalte ich alle möglichen Fehler bei jedem Versuch, as anzuhängen earr$j+=(${arr2[j-1]})
(und alle möglichen Variationen, die ich ausprobiert habe) in einer Schleife über j
. Unten ist der Ausschnitt, der mir Probleme bereitet. Ich wäre dankbar, wenn jemand auf das Problem hinweisen und, wenn möglich, ein funktionierendes Beispiel für eine Lösung liefern könnte.
Die fragliche For-Schleife:
for j in $(seq 1 $number_of_lists); do echo "(${arr2[j-1]})"; earr$j+=(${arr2[j-1]}); echo "(${arr3[j-1]})"; done
Insbesondere mit dem earr$j+=(${arr2[j-1]})
Teil habe ich Probleme. Dies ist meine Fehlerausgabe:
./next.sh: line 33: syntax error near unexpected token "${arr2[j-1]}''
Und ./next.sh: line 33: earr$j+=('${arr2[j-1]}')
.
Vielen Dank im Voraus für alle Vorschläge.