2010-07-22 5 views
0

J'ai un problème avec la syntaxe awk suivanteawk + string match après « = » séparateur

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

Les impressions awk « passaient », mais il ne devrait pas être parce que, après « = » je « param1 « et non « AA » ou AB », etc.

l'objectif du awk est d'imprimer « passé » que si la chaîne après « = » est AA ou AB ou AC oU AD.

et si J'ai quelque chose d'autre après "=" puis son impression ne devrait pas passé

comment réparer la syntaxe awk?

Lidia

+0

ne pas ouvrir une autre similaire fil à vos précédents. – ghostdog74

+0

Désolé votre réponse n'est pas correcte, et je ne reçois pas de réponse réelle donc ce que je suppose à faire – lidia

Répondre

1

Vous devez ancres:

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

Si vous souhaitez autoriser des espaces:

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

echo "param1 param2 param3 = AA" | awk -F = '$ 2 ~/^ (AA | AB | AC | AD) $/{print "passé"}', son impression n'est pas passée pourquoi ??? – lidia

+0

parce que vous avez des espaces autour de AA. "AA" n'est pas la même chose que "AA". – unbeli

+0

besoin de prendre en charge les espaces aussi – lidia

0

Cela devrait fonctionner:

echo " param1 param2 param3 = param1 AA , AB , AC , AD " | 
awk -F"=" -v var="passed" '$2~/AA|AB|AC|AD/{printf "%s",var}' 
+0

sa machine Linux pas windows – lidia

+0

son travail pas "^ backslash pas dernier caractère en ligne" – lidia

Questions connexes