아래 한 줄이 들어있는 파일이 있습니다.
{machineA=[0, 1024, 4, 1028], machineB=[1, 1025, 5, 1029]}
두 개의 데이터 세트가 있습니다.
machineA=[0, 1024, 4, 1028]
machineB=[1, 1025, 5, 1029]
이제 위의 파일을 읽고 위에서 언급 한대로 각 머신의 정보를 추출하여 일부 데이터 구조에 저장할 수있는 방식으로 분할해야합니다.
현재 bash 쉘 스크립트에서 사용해야하는 데이터 구조가 혼란 스럽습니다. Java 로이 작업을 수행했다면 사용 Map<String, Set<String>>
하지만 쉘 스크립트에서 무엇을 사용 해야하는지 잘 모르겠습니다.
그리고 일부 데이터 구조에 저장 한 후 반복하고 결과를 인쇄해야합니다.
아래 쉘 스크립트를 사용하여 위 파일을 읽을 수 있습니다.
#!/bin/bash
while read -r line; do
echo "$line"
done < data.txt
그러나 각 기계 정보를 추출한 다음 일부 데이터 구조에 저장할 수 있도록 위의 행 데이터를 분할하는 방법을 잘 모르겠습니다.
최신 정보:-
아래는 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