Bash-使用循环填充关联数组

时间:2014-11-11 01:33:31

标签: arrays bash awk associative-array

所以我要将其输入到关联数组中:

47 SPRINGGREEN2
48 SPRINGGREEN1
49 MEDIUMSPRINGGREEN
50 CYAN2
51 CYAN1
52 DARKRED
53 DEEPPINK4

它是bash脚本的一部分。 我正在寻找一种方法来制作一个关联数组,所以它看起来像

    declare -A cols=( [SPRINGGREEN2]="0;47"...[DEEPPINK4]="0;53" )

我可以很容易地手动完成。

但是我想使用for循环来填充数组cols =([KEY] =“vALUE”) For循环将需要47,48,49 ... 53并将其输入VALUE字段, 和SPRINGGREEN2 ... DEEPPINK4进入关键领域。

我在考虑使用awk,但无法想象如何隔离这两个字段并使用每个条目来填充数组。

1 个答案:

答案 0 :(得分:4)

您是否打算从文件中读取并填充cols数组?

declare -a cols
while read num color; do
    cols[$num]=$color
done < file.txt
for key in "${!cols[@]}"; do printf "%s\t%s\n" "$key" "${cols[$key]}"; done

哦,另一方面,如果你已经有了关联数组,而且你还想要一个“反转”数组:

declare -a rev_cols
for color in "${!cols[@]}"; do
    rev_cols[${cols[$color]#*;}]=$color
done
for key in "${!rev_cols[@]}"; do printf "%s\t%s\n" "$key" "${rev_cols[$key]}"; done