Ich arbeite an einem Bash-Projekt. Ich muss alle Werte (einen nach dem anderen, da ich sie woanders verwenden werde) aus einer Textdatei abrufen. Die Textdatei, die ich abrufen werde, ist folgendermaßen strukturiert:
Report:
-----------
Name Column1 Column2 Column3 Column4
row1 val1 val2 val3 val4
row2 val5 val6 val7 val8
row3 val9 val10 val11 val12
Es gibt keine festgelegte Anzahl von Zeilen und Spalten, daher brauche ich etwas Allgemeines. Wie rufe ich in Bash jeden Wert einzeln ab? Danke.
Antwort1
Sie können den Inhalt einer Datei zeilenweise mithilfe bash
while
einer Schleife verarbeiten:
i=1
while IFS= read -a line; do
printf "Line number %d:\n" $i
printf "%s\n" "${line[@]}"
let i++
done < "file.txt"
Jede Zeile wird in einem Array gespeichert line
. Sie können jedes Element des Arrays line
mit der folgenden Syntax abrufen:
echo "${line[n]}"
wobei n
die Reihenfolge der Elemente im Array ist.
Antwort2
Und durch den awk-Befehl,
$ awk '/^Report|^-----|^Name/ {next}{for (i=2;i<=NF;i++){print $i}}' file
val1
val2
val3
val4
val5
val6
val7
val8
val9
val10
val11
val12
Es überspringt die Zeile, mit der es beginnt, Report,---,Name
und druckt alle Werte von der zweiten Spalte bis zum Ende jeder Zeile. Die Werte werden in einer neuen Zeile gedruckt.