数组 – 检查awk数组是否包含值

前端之家收集整理的这篇文章主要介绍了数组 – 检查awk数组是否包含值前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
使用Perl,您可以检查数组是否包含值
$perl -e '@foo=(444,555,666); print 555 ~~ @foo ? "T" : "F"'
T

但是对于awk,这个类似的命令是检查数组索引而不是

$awk 'BEGIN {split("444 555 666",foo); print 555 in foo ? "T" : "F"}'
F

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

解决方法

Awk noob在这里.我消化了 Steven’s answer并最终得到了这个希望更容易理解下面的片段.还有2个微妙的问题:

> Awk数组实际上是一个字典.它不是[“value1”,“value2”],它更像是{0:“value1”,1:“value2”}.
>检查密钥,并且没有内置方法来检查值.

因此,您必须将数组(实际上是字典)转换为值为键的字典.

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'

猜你在找的Linux相关文章