2016-10-30 6 views
0

후 나는 간단한 코드 두 개의 배열로 구성된 조각과 비교AWK 배열 - 유령 항목을 비교

// { 
    # Create an array 
    animals["goat"] = "4 legs" 
    animals["chicken"] = "2 legs" 
    animals["elefant"] = "4 legs" 

    for (animal in animals) { 
     print "Animal: " animal " has: " animals[animal] 
    } 


    zoo["lion"] = "4 legs" 
    zoo["leguana"] = "4 legs" 

    for (animal in zoo) { 
     if (animals[animal] != "2 legs") { 
      # do something 
     } 
    } 

    for (animal in animals) { 
     print "Again. Animal: " animal " has: " animals[animal] 
    } 

} 

경우 입력 파일 나던 문제가 있습니다.

문제는 if 문을 사용하여 for 루프에 있습니다. 갑자기 배열 "동물"두 가지 새로운 키가

Animal: chicken has: 2 legs 
Animal: goat has: 4 legs 
Animal: elefant has: 4 legs 
Again. Animal: chicken has: 2 legs 
Again. Animal: goat has: 4 legs 
Again. Animal: elefant has: 4 legs 
Again. Animal: lion has: 
Again. Animal: leguana has: 

주의 사항 : I 배열 "동물"에 다른 값을 "이 다리를"동일하지만 일어나고있는 것은이하지 않은 경우 단순히 비교하는 기대 , 사자는 가치없는 leguana. 왜 이런 일이 일어나는 걸까요? =! 값을 할당해서는 안되며 배열에 존재하지 않을 수도있는 키 값이 있는지 여부 만 확인하면됩니다. 배열에 존재하지 않을 수도있는 키가 배열에 키를 생성하는 특정 값을 가지고 있는지 확인하는 방법이 있습니까?

답변

0

은 결국 나는 여기에 해답을 발견 : 당신은해야

+0

하지만 둘 다 할 수 있다면 대답은 아닙니다. 색인이 존재하는지 확인하고 두 개의 if 문 대신 해당 색인의 값을 확인하십시오. – Johnathan

+0

https://www.gnu.org/software/gawk/manual/html_node/Boolean-Ops.html#Boolean-Ops –

1

배열의

INDX : https://www.gnu.org/software/gawk/manual/html_node/Reference-to-Elements.html

이 요소가 특정 인덱스 배열에 존재하는지 여부를 확인하려면를 다음 식을 사용 동물의 동물로 동물 [동물]을 보호하십시오.

for (animal in zoo) { 
    if (animal in animals && animals[animal] != "2 legs") { 
     print "Then Animal:" animal 
    } 
    else { 
     print "Else Animal:" animal 
    } 
}