awk + строка совпадения после “=” разделитель

У меня есть проблема со следующим awk синтаксисом

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

печать awk передала, но не shuld быть, потому что после "=" у меня есть param1 и не "AA" или AB" и т.д.

цель awk состоит в том, чтобы распечатать, передал, только если строкой после "=" является AA ИЛИ AB ИЛИ AC ИЛИ AD

и если у меня есть что-то еще после того, как "=" затем не должен распечатать, передал

как зафиксировать awk синтаксис?

lidia

1
задан 22.07.2010, 11:37

2 ответа

После =, у Вас есть строка param1 AA , AB , AC , AD. Ваше awk выражение принимает любую строку, которая содержит AA или AB или AC или AD. Если Вы хотите, чтобы эти слова появились в начале поля, необходимо привязать шаблон (запустите его с ^ для соответствия только вначале закончите его с '$' для соответствия только в конце). Например, следующее выражение требует, чтобы поле было только одним из указанных слов, возможно с пробелами прежде и после:

$2 ~ /^ *(AA|AB|AC|AD) *$/
2
ответ дан 12.12.2019, 10:41

Это awk выражение для поиска AA в начале поля является ^AA, или позволить нуль или больше пробелов между = и AA, это - ^ *AA, таким образом, это выражение должно только распечатать, передал, если первым сроком после = является AA ИЛИ BB ИЛИ AC ИЛИ AD, которому предшествует нуль или больше пробелов.

awk -F"=" '$2~/^ *AA|^ *AB|^ *AC|^ *AD/{print "passed"}'
1
ответ дан 12.12.2019, 10:41

Теги

Похожие вопросы