Ho un file che contiene la riga singola di seguito:
{machineA=[0, 1024, 4, 1028], machineB=[1, 1025, 5, 1029]}
in cui ho due set di dati:
machineA=[0, 1024, 4, 1028]
machineB=[1, 1025, 5, 1029]
Ora, ho bisogno di leggere il file sopra e dividerlo in modo tale da poter estrarre le informazioni di ogni macchina come menzionato sopra e memorizzarle in una struttura di dati.
Attualmente, sono confuso quale struttura di dati dovrei usare in uno script di shell bash. Se lo facessi in Java, lo userei Map<String, Set<String>>
ma non sono sicuro di cosa dovrei usare in uno script di shell.
E dopo averlo archiviato in una struttura di dati, devo iterarlo e stampare il risultato.
Sono in grado di leggere il file sopra usando lo script di shell qui sotto:
#!/bin/bash
while read -r line; do
echo "$line"
done < data.txt
Ma non sono sicuro di come dividere i dati della riga sopra in modo tale da poter estrarre le informazioni di ogni macchina e quindi memorizzarle in una struttura di dati?
AGGIORNARE:-
Di seguito è riportato il mio script shell che ho ricevuto dopo aver seguito il suggerimento dato da 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