以下の1行を含むファイルがあります。
{machineA=[0, 1024, 4, 1028], machineB=[1, 1025, 5, 1029]}
ここには2つのデータセットがあります。
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