我正在尝试获取文件并将文件中的项目存储到bash中的关联数组中。关联数组可能不是我行动的最佳方法,但从我的研究来看,这似乎是一个很好的选择。我有一个如下所示的文件:
personid
phone
phone
phone
personid
phone
phone
phone
请注意,persionid总是20位,电话总是10.此文件中没有其他内容,也没有空格,每行只有一个。我想把这些映射到一个关联数组,我的密钥是personid,我的价值是电话。
我就这篇文章所做的代码如下:
declare -A person
while read key; do
if [ ${#key} -eq 20 ] ; then
personID="$key"
else
phone="$key"
fi
person=( ["$personID"]="$phone" )
done < myFile.txt
for i in "${!person[@]}"
do
echo "key: $i"
echo "value: ${person[$i]}"
done
它将正确存储和打印一个personID作为键,一个手机作为值....但手机应该有多个值。我在想,当我指派人时,我一定是做错了,或者把它放错了。但是我已经玩了很长时间了,并且无法做到正确。从来没有使用过关联数组,所以有点麻烦。在此先感谢您的帮助!
答案 0 :(得分:1)
关联数组与任何其他数组没有什么不同,因为从键(或索引)到值总是会有1:1的完全映射。在您的情况下,您需要从密钥(personID)到值(电话号码)的1:多映射。一种方法是简单地存储一个电话号码列表,这些电话号码实际上是单个&#34;值映射到personID。您可以使用空格或逗号分隔符或其他任何内容构建您喜欢的列表。
例如,如果您想:作为分隔符,您可以执行此操作以将每个电话号码添加到列表中:
if [ -n ${person[$personID]} ] ; then
person[$personID]}="${person[$personID]}:$phone"
else
person[$personID]}="$phone"
fi