ne peut pas utiliser la variable unix $ dans la commande awk

J’ai une variable suivante définie dans mon environnement Unix. Si j’essaie de l’utiliser dans la commande awk, cela ne fonctionne pas mais la même commande fonctionne quand je n’utilise pas la variable $ b

$ b = “NOUVEAU”

quand j’essaie la commande suivante, il ne fonctionne pas

echo "$a" | tr [az] [AZ] |awk -v RS=, '/TABLE/&&/CREATE/&&/`echo ${b}`/{print $NF}' 

Mais, si je remplace la valeur $ b par NEW comme ci-dessous

  echo "$a" | tr [az] [AZ] |awk -v RS=, '/TABLE/&&/CREATE/&&/NEW/{print $NF}' 

Vous ne pouvez pas utiliser une bash var dans awk comme ça. Au lieu de cela, utilisez:

 echo "$a" | tr [az] [AZ] | awk -v RS=, -v myvar=$b '/TABLE/&&/CREATE/&& $0~myvar {print $NF}' 

Voir un exemple:

 $ var="hello" $ awk -v text=$var 'BEGIN{print text}' hello 

De plus, pour moi, cela fonctionne avec tr 'az' 'A-Z' au lieu de tr [az] [AZ] . Et sur la base de la suggestion de Mark Setchell , vous pouvez l’ignorer en utilisant IGNORECASE = 1 :

 echo "$a" | awk -v RS=, -v myvar=$b 'BEGIN{IGNORECASE=1} /TABLE/&&/CREATE/&& $0~myvar {print $NF}' 

Concernant votre question:

 if i replace the $b value to NEW as below its working 

Cela fonctionne parce que la valeur de votre variable est NEW et que vous finissez par l’utiliser dans le regex , ce qui est exactement ce que vous devez faire.

à propos de votre deuxième question:

 can not use unix $variable in awk command 

Vous ne pouvez pas utiliser de variables shell dans awk comme ça. Vous devez créer une variable awk en utilisant l’option -v et en atsortingbuant votre variable bash .

 awk -v awkvar="$bashvar" '/ /{ ... }' 

Cela rend votre syntaxe existante comme:

 echo "$a" | tr [az] [AZ] | awk -v RS=, -v var="$b" '/TABLE/&&/CREATE/&&/var/{print $NF}' 

Cela ne fonctionnera pas, car les variables / / / ne sont pas interpolées, ce qui signifie qu’elles sont considérées littéralement. Donc, vous devez faire:

 echo "$a" | tr [az] [AZ] |awk -v RS=, -v var="$b" '/TABLE/&&/CREATE/&&$0~var{print $NF}'