Tôi có một tập tin chứa dòng duy nhất dưới đây:
{machineA=[0, 1024, 4, 1028], machineB=[1, 1025, 5, 1029]}
trong đó tôi có hai bộ dữ liệu:
machineA=[0, 1024, 4, 1028]
machineB=[1, 1025, 5, 1029]
Bây giờ, tôi cần đọc tệp trên và chia nó theo cách mà tôi có thể trích xuất thông tin của từng máy như đã đề cập ở trên và lưu trữ nó trong một số cấu trúc dữ liệu.
Hiện tại, tôi bối rối không biết nên sử dụng cấu trúc dữ liệu nào trong tập lệnh bash shell. Nếu tôi đang làm điều này trong Java, tôi sẽ sử dụng Map<String, Set<String>>
nhưng tôi không chắc mình nên sử dụng cái gì trong tập lệnh shell.
Và sau khi lưu trữ nó trong một số cấu trúc dữ liệu, tôi cần lặp lại nó và in ra kết quả.
Tôi có thể đọc tệp trên bằng cách sử dụng tập lệnh shell bên dưới:
#!/bin/bash
while read -r line; do
echo "$line"
done < data.txt
Nhưng tôi không chắc làm thế nào để phân chia dữ liệu dòng trên theo cách sao cho tôi có thể trích xuất từng máy thông tin và sau đó lưu trữ nó trong một số cấu trúc dữ liệu?
CẬP NHẬT: -
Dưới đây là kịch bản shell của tôi, tôi đã nhận được sau khi làm theo gợi ý được đưa ra bởi 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