awk + corresponde a string após o separador “=”

0

Eu tenho problema com a seguinte sintaxe do awk

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

o awk print passou, mas não é porque depois "=" eu tenho param1 e não "AA" ou AB "etc

o alvo do awk é imprimir passado somente se a string depois de "=" é AA OU AB OU AC OU AD

e se eu tiver algo mais depois de "=", então não é necessário imprimir passado

como consertar a sintaxe do awk?

lidia

    
por lidia 22.07.2010 / 10:37

2 respostas

1

Após o = , você tem a string param1 AA , AB , AC , AD . Sua expressão awk aceita qualquer string que contenha AA ou AB ou AC ou AD . Se você quiser que essas palavras apareçam no início do campo, será necessário ancorar o padrão (inicie com ^ para corresponder apenas no início, termine com '$' para corresponder apenas no final). Por exemplo, a expressão a seguir exige que o campo seja apenas uma das palavras especificadas, possivelmente com espaços antes e depois:

$2 ~ /^ *(AA|AB|AC|AD) *$/
    
por 22.07.2010 / 19:34
0

Esta expressão awk para procurar AA no início do campo é ^ AA, ou para permitir zero ou mais espaços entre = e o AA, é ^ * AA, portanto esta expressão deve ser impressa somente se o primeiro prazo após o = é AA OU BB OU AC OU ANÚNCIO precedido por zero ou mais espaços.

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

Tags