【发布时间】:2015-01-01 00:07:29
【问题描述】:
使用 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 检查数组是否包含特定值?
【问题讨论】:
-
我相信你唯一的选择就是循环播放。
-
就像 Etan 说的,你需要一个 for 循环。您可以通过创建一个以值作为键的新数组(哈希)来获得一些灵活的结果,例如:
awk 'BEGIN { split("444 555 666", foo); for(i=1; i<=length(foo); i++) bar[foo[i]]; print 555 in bar ? "T" : "F" }' -
@Thor - 你不能用
for( i in foo ) bar[foo[i]]代替吗? -
@n0741337:你是对的,更短更干净,所以它变成:
awk 'BEGIN { split("444 555 666", foo); for(i in foo) bar[foo[i]]; print 555 in bar ? "T" : "F" }'。