不能在awk命令中使用unix $变量

log*_*gan 0 unix linux bash shell awk

我在unix环境中设置了以下变量.如果我尝试在awk命令中使用它,它不工作,但当我不使用$ b变量时,相同的命令工作

$ B = "NEW"

当我尝试按照命令它不工作

 echo "$a" | tr [a-z] [A-Z]  |awk -v RS=, '/TABLE/&&/CREATE/&&/`echo ${b}`/{print $NF}'
Run Code Online (Sandbox Code Playgroud)

但是,如果我将$ b值替换为NEW,则将其替换为低于其工作状态

 echo "$a" | tr [a-z] [A-Z]  |awk -v RS=, '/TABLE/&&/CREATE/&&/NEW/{print $NF}'
Run Code Online (Sandbox Code Playgroud)

fed*_*qui 5

你不能像这样使用bashvar awk.相反,使用:

echo "$a" | tr [a-z] [A-Z] | awk -v RS=, -v myvar=$b '/TABLE/&&/CREATE/&& $0~myvar {print $NF}'
Run Code Online (Sandbox Code Playgroud)

看一个例子:

$ var="hello"
$ awk -v text=$var 'BEGIN{print text}'
hello
Run Code Online (Sandbox Code Playgroud)

另外,对我而言,它可以tr 'a-z' 'A-Z'代替tr [a-z] [A-Z].根据Mark Setchell的建议,您可以使用以下命令跳过它IGNORECASE = 1:

echo "$a" | awk -v RS=, -v myvar=$b 'BEGIN{IGNORECASE=1} /TABLE/&&/CREATE/&& $0~myvar {print $NF}'
Run Code Online (Sandbox Code Playgroud)