Ich habe eine Datei, die die folgende einzelne Zeile enthält:
{machineA=[0, 1024, 4, 1028], machineB=[1, 1025, 5, 1029]}
in dem ich zwei Datensätze habe:
machineA=[0, 1024, 4, 1028]
machineB=[1, 1025, 5, 1029]
Jetzt muss ich die obige Datei lesen und so aufteilen, dass ich die Informationen der einzelnen Maschinen wie oben erwähnt extrahieren und in einer Datenstruktur speichern kann.
Derzeit bin ich verwirrt, welche Datenstruktur ich in einem Bash-Shell-Skript verwenden soll. Wenn ich dies in Java tun würde, würde ich verwenden, Map<String, Set<String>>
aber ich bin nicht sicher, was ich in einem Shell-Skript verwenden soll.
Und nachdem ich es in einer Datenstruktur gespeichert habe, muss ich es iterieren und das Ergebnis ausdrucken.
Ich kann die obige Datei mit dem folgenden Shell-Skript lesen:
#!/bin/bash
while read -r line; do
echo "$line"
done < data.txt
Ich bin mir jedoch nicht sicher, wie ich die obigen Zeilendaten so aufteilen soll, dass ich jede Maschineninformation extrahieren und dann in einer Datenstruktur speichern kann.
AKTUALISIEREN:-
Unten ist mein Shell-Skript, das ich erhalten habe, nachdem ich dem Vorschlag von glenn gefolgt bin -
#!/bin/bash
while read -r line; do
echo "$line"
declare -A "$(
echo "x=("
grep -oP '(\w+)(?==)|(?<==\[).*?(?=\])' <<< "$line" |
tr -d , |
paste - - |
sed 's/^/[/; s/\t/]="/; s/$/"/'
echo ")"
)"
for key in "${!x[@]}"; do # need quotes here
for element in ${x[$key]}; do # no quotes here
printf "%s\t%s\n" "$key" "$element"
done
done
done < primary.txt