awk简洁的方法来检查2个字段是否匹配相同的字符串

时间:2017-02-07 14:43:11

标签: awk

我想检查2个字段是否与特定模式匹配,这是我到目前为止所做的:

openstack floating ip list -f value | awk '$3 ~ /None/ && $4 ~ /None/{print $2}'

如果第3和第4个字段等于"无"它会打印第二个字段。这就是我想要的,但似乎效率低下。

使用awk吗?

有更简洁的方法吗?

2 个答案:

答案 0 :(得分:2)

如果要检查是否相等,则应使用更有效的==(或!=)运算符,因为它不需要执行正则表达式匹配:

awk '$3 == "None" && $4 == "None" {print $2}'

其余的看起来不错。

答案 1 :(得分:2)

你可以这样做:

awk '$3$4~/None{2}/{print $2}'

但如果$ 3包含“NoneNone”且$ 4为空等,则会产生错误匹配,因此YMMV与您的数据实际包含的内容相同。你可以把它调整为:

awk '$3" "$4" " ~ /(None ){2}/{print $2}'

但现在它变得有点模糊了。改进脚本的唯一合理方法是不要多次使用相同的硬编码值:

awk -v n="None" '$3==n && $4==n{print $2}'