awk数组 - 比较后的鬼条目

时间:2016-10-30 05:23:05

标签: awk awk-formatting

我有一个简单的代码片段,由两个数组和一个if比较

组成
// {
    # 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循环中的if语句。我希望它只是比较数组中的不同值" animals"不等于" 2条腿"但是发生的事情是:

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:

注意突然阵列"动物"有两个新的钥匙,狮子和leguana,但没有价值。为什么会这样? =!不应该分配一个值,它应该只看一个键是否有值,一个键可能不存在于数组中。 有没有办法检查数组中可能不存在的键是否具有某个值,而不是在数组中创建键?

2 个答案:

答案 0 :(得分:1)

你必须保护,指导,动物[动物]与动物动物

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

答案 1 :(得分:0)

最终我找到了答案: https://www.gnu.org/software/gawk/manual/html_node/Reference-to-Elements.html

要确定元素是否存在于某个索引处的数组中,请使用以下表达式:

数组中的

indx