Mam plik zawierający jedną linię poniżej:
{machineA=[0, 1024, 4, 1028], machineB=[1, 1025, 5, 1029]}
w którym mam dwa zestawy danych:
machineA=[0, 1024, 4, 1028]
machineB=[1, 1025, 5, 1029]
Teraz muszę przeczytać powyższy plik i podzielić go w taki sposób, aby wyodrębnić informacje o każdym komputerze, jak wspomniano powyżej, i zapisać je w jakiejś strukturze danych.
Obecnie nie jestem pewien, jakiej struktury danych powinienem używać w skrypcie powłoki bash. Gdybym robił to w Javie, skorzystałbym, Map<String, Set<String>>
ale nie jestem pewien, czego powinienem użyć w skrypcie powłoki.
Po zapisaniu go w jakiejś strukturze danych muszę go powtórzyć i wydrukować wynik.
Jestem w stanie odczytać powyższy plik za pomocą poniższego skryptu powłoki:
#!/bin/bash
while read -r line; do
echo "$line"
done < data.txt
Ale nie jestem pewien, jak podzielić powyższe dane wiersza w taki sposób, aby móc wyodrębnić informacje o każdej maszynie, a następnie zapisać je w jakiejś strukturze danych?
AKTUALIZACJA:-
Poniżej znajduje się mój skrypt powłoki, który otrzymałem po wykonaniu sugestii glenn -
#!/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