我需要从输入构建一个关联数组。我使用过该脚本但无法正常工作:
declare -A map
data="aa|AA"
echo $data | awk -F"|" '{ map[$1] = $2 }'
for i in "${!map[@]}"; do
echo "${map[$i]}"
done
你能为这个问题提供解决方案吗?
答案 0 :(得分:2)
在您的示例中,您在awk
中创建了一个关联数组,而不是在shell中。
您可以在shell中创建一个关联数组,如下所示:
while IFS='|' read k v; do map[$k]=$v; done <<< $data
据我了解,您的输入可能很复杂,因此您希望使用awk
处理它,然后在shell中填充关联数组以便稍后在脚本中使用它。虽然awk
和shell无法共享变量,但可能的解决方法是输出awk
的变量赋值,您可以将其包含在eval
中:
eval $(printf "aa|AA\nbb|BB\n" | awk -F"|" '{ map[$1] = $2 } END { for (k in map) print "map[" k "]=" map[k] }')
这样你就得到了:
$ for i in ${!map[@]}; do echo $i=${map[$i]}; done
aa=AA
bb=BB