根据输入数据构建关联数组

时间:2013-12-27 18:22:42

标签: bash awk

我需要从输入构建一个关联数组。我使用过该脚本但无法正常工作:

declare -A map

data="aa|AA"

echo $data | awk -F"|" '{ map[$1] = $2 }'

for i in "${!map[@]}"; do
    echo "${map[$i]}"
done

你能为这个问题提供解决方案吗?

1 个答案:

答案 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