linux - 不能在 awk 命令中使用 unix $variable

标签 linux bash shell unix awk

<分区>

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

$b="新"

当我尝试执行命令时它不工作

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

但是,如果我将 $b 值替换为 NEW,因为 低于其工作范围

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

最佳答案

你不能像那样在 awk 中使用 bash var。相反,使用:

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

看一个例子:

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

此外,对我来说它适用于 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}'

关于linux - 不能在 awk 命令中使用 unix $variable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22100028/

相关文章:

linux - 如何编写bash代码将一些内容输入文件并保存文件?

bash - 如何在 shell 中找到值 2 指数?

linux - 如何使用命令检查 Linux 中进程的 I/O 利用率

linux - source、zsh、 "."和直接shell脚本调用的区别

linux - 如何在 64 位机器上测试 32 位内核特定的系统调用?

bash - 如何更改变量的最后一位

c - GDB 核心调试建议传递给函数的指针在调用后变为 NULL

shell - 如果文件输出一些错误,则引发错误(不引发 shell 错误)

linux - 如何唤醒内核中的用户态 sleep 进程?

linux - 为什么我的 bash 脚本在空白处中断?