With Perl you can check if an array contains a value
$ perl -e '@foo=(444,555,666); print 555 ~~ @foo ? "T" : "F"'
T
However with awk, this similar command is checking the array indexes rather than values
$ awk 'BEGIN {split("444 555 666", foo); print 555 in foo ? "T" : "F"}'
F
How can I check if an array contains a particular value with awk?
Awk noob here. I digested Steven's answer and ended up with this hopefully easier to understand snippet below. There are 2 more subtle problems:
["value1", "value2"]
, it's more like {0: "value1", 1: "value2"}
.in
checks for keys, and there is no built-in way to check for values.So you have to convert your array (which is actually a dictionary) to a dictionary with the values as keys.
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'
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With