使用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'