gpt4 book ai didi

arrays - 检查 awk 数组是否包含值

转载 作者:行者123 更新时间:2023-12-04 00:44:14 26 4
gpt4 key购买 nike

使用 Perl,您可以检查数组是否包含值

$ perl -e '@foo=(444,555,666); print 555 ~~ @foo ? "T" : "F"'
T

但是对于 awk,这个类似的命令是检查数组索引而不是
值(value)观
$ awk 'BEGIN {split("444 555 666", foo); print 555 in foo ? "T" : "F"}'
F

如何使用 awk 检查数组是否包含特定值?

最佳答案

awk 菜鸟在这里。我消化了Steven's answer最后得到了这个希望更容易理解的片段。还有两个更微妙的问题:

  • 一个 awk 数组实际上是一个字典。这不是 ["value1", "value2"] ,更像是 {0: "value1", 1: "value2"} .
  • in检查键,并且没有内置的方法来检查值。

  • 因此,您必须将数组(实际上是字典)转换为以值作为键的字典。
    BEGIN {

    split("value1 value2", valuesAsValues)
    # valuesAsValues = {0: "value1", 1: "value2"}

    for (i in valuesAsValues) valuesAsKeys[valuesAsValues[i]] = ""
    # valuesAsKeys = {"value1": "", "value2": ""}
    }

    # Now you can use `in`
    ($1 in valuesAsKeys) {print}

    对于单行:
    echo "A:B:C:D:E:F" | tr ':' '\n' | \
    awk 'BEGIN{ split("A D F", parts); for (i in parts) dict[parts[i]]=""} $1 in dict'

    关于arrays - 检查 awk 数组是否包含值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26746361/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com