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