У меня проблема со следующим синтаксисом 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?

Lidia

2 ответа2

1

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .