Aşağıdaki tek satır içeren bir dosya var:
{machineA=[0, 1024, 4, 1028], machineB=[1, 1025, 5, 1029]}
içinde iki veri setim var:
machineA=[0, 1024, 4, 1028]
machineB=[1, 1025, 5, 1029]
Şimdi, yukarıdaki dosyayı okumam ve her makinenin bilgilerini yukarıda belirtildiği gibi ayıklayabilmem ve bazı veri yapısında saklayabilmem için bölmem gerekiyor.
Şu anda, bash kabuk betiğinde hangi veri yapısını kullanmam gerektiği konusunda kafam karıştı. Bunu Java'da yapsaydım, kullanardım Map<String, Set<String>>
ama bir kabuk betiğinde ne kullanmam gerektiğinden emin değilim.
Ve bazı veri yapılarında sakladıktan sonra, onu tekrarlamam ve sonucu yazdırmam gerekiyor.
Aşağıdaki kabuk betiğini kullanarak yukarıdaki dosyayı okuyabiliyorum:
#!/bin/bash
while read -r line; do
echo "$line"
done < data.txt
Ancak yukarıdaki satır verilerini nasıl ayıracağımdan emin değilim, böylece her makine bilgisini çıkarabilir ve daha sonra bazı veri yapısında depolayabilir miyim?
GÜNCELLEME:-
Aşağıda benim glenn tarafından verilen öneri takip ettikten sonra kabuk komut dosyası var -
#!/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