2013-10-10 2 views
1

파일을 가져 와서 파일의 항목을 bash의 연관 배열에 저장하려고합니다. 연상 배열은 내 행동을위한 최선의 과정이 아닐 수도 있지만, 나의 연구에서 그것은 좋은 적합으로 보인다. 나는처럼 보이는 파일이 다음Bash의 연관 배열

personid 
phone 
phone 
phone 
personid 
phone 
phone 
phone 

유의하시기 바랍니다 persionid 항상 20 자리이며, 전화는 그냥 줄에 이들 중 하나에 공백이 파일에 다른 아무것도 없습니다 항상 10 없으며, . 필자는 개인 키인 키와 전화 인 나의 가치를 연관 배열에 매핑하려고했습니다.

내가이 작품에 대한에 작업 한 코드는 다음

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

연관 배열 또는지도 키 - 값 쌍을 저장합니다. 원하는 것은 여러 값을 단일 키와 연관시킬 수있는 멀티 맵입니다. 개인적으로, 나는 bash 스크립트가 너무 복잡해지면서 지금까지 파이썬으로 전환했을 것이다. – Dennis

+0

Dennis, 내 부분의 연관 배열에 대해 오해하겠습니다. – warlord786

+0

'bash'는 데이터 처리를위한 것이 아니라 다른 프로세스를 실행하기위한 것입니다. – chepner

답변

1

연관 배열은 키 (또는 인덱스)에서 값까지 항상 정확히 1 : 1 매핑이 있다는 점에서 다른 배열과 다르지 않습니다. 귀하의 경우에는 키 (personID)에서 값 (전화 번호)까지 1 : 많은 매핑이 필요합니다. 이렇게하는 한 가지 방법은 간단히 personID에 매핑 된 "단일"값인 전화 번호 목록을 저장하는 것입니다. 공백이나 쉼표 구분 기호 또는 다른 것을 사용하여 목록을 만들 수 있습니다. 예를 들어

원하는 경우

: 당신의 구분 기호로, 당신은 목록에 각각의 전화 번호를 추가하기 위해이 작업을 수행 할 수 있습니다 :

if [ -n ${person[$personID]} ] ; then 
    person[$personID]}="${person[$personID]}:$phone" 
else 
    person[$personID]}="$phone" 
fi 
+0

아 좋아, 고마워. 내 파트의 연관 배열에 대한 오해 : – warlord786

+1

@ warlord786 - 걱정 마세요 :) - 오늘부터 뭔가를 배웠습니다. 그만한 가치가있는 것이 있습니다! –