awk + ​​匹配“=”分隔符后的字符串

awk + ​​匹配“=”分隔符后的字符串

我对以下 awk 语法有疑问

    echo " param1 param2 param3 = param1 AA , AB , AC , AD  "  | awk -F"=" '$2~/AA|AB|AC|AD/{print "passed"}'

awk 打印已通过,但不应该这样,因为在“=”之后我有 param1,而不是“AA”或 AB”等

awk 的目标是仅当“=”后的字符串是 AA 或 AB 或 AC 或 AD 时才打印通过

如果“=”后面还有其他内容,那么就不应该打印已传递的内容

如何修复 awk 语法?

莉迪亚

答案1

在 之后=,您得到了字符串param1 AA , AB , AC , AD。您的 awk 表达式接受任何符合以下条件的字符串:包含 AAABACAD。如果您希望这些单词出现在字段的开头,则需要固定模式(以 开始以^仅在开头匹配,以 '$' 结束以仅在结尾匹配)。例如,以下表达式要求字段仅是指定的单词之一,前后可能带有空格:

$2 ~ /^ *(AA|AB|AC|AD) *$/

答案2

这个 awk 表达式用于在字段开头搜索 AA,即 ^AA,或者用于在 = 和 AA 之间允许零个或多个空格,即 ^ *AA,因此,如果 = 后的第一个术语是 AA OR BB OR AC OR AD 且前面有零个或多个空格,则此表达式应该只打印通过。

awk -F"=" '$2~/^ *AA|^ *AB|^ *AC|^ *AD/{print "passed"}'

相关内容