У меня есть проблема со следующим 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
После =
, у Вас есть строка param1 AA , AB , AC , AD
. Ваше awk выражение принимает любую строку, которая содержит AA
или AB
или AC
или AD
. Если Вы хотите, чтобы эти слова появились в начале поля, необходимо привязать шаблон (запустите его с ^
для соответствия только вначале закончите его с '$' для соответствия только в конце). Например, следующее выражение требует, чтобы поле было только одним из указанных слов, возможно с пробелами прежде и после:
$2 ~ /^ *(AA|AB|AC|AD) *$/
Это awk выражение для поиска AA в начале поля является ^AA, или позволить нуль или больше пробелов между = и AA, это - ^ *AA, таким образом, это выражение должно только распечатать, передал, если первым сроком после = является AA ИЛИ BB ИЛИ AC ИЛИ AD, которому предшествует нуль или больше пробелов.
awk -F"=" '$2~/^ *AA|^ *AB|^ *AC|^ *AD/{print "passed"}'