我想检查2个字段是否与特定模式匹配,这是我到目前为止所做的:
openstack floating ip list -f value | awk '$3 ~ /None/ && $4 ~ /None/{print $2}'
如果第3和第4个字段等于"无"它会打印第二个字段。这就是我想要的,但似乎效率低下。
使用awk
吗?
答案 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}'