linux shell awk 变量互相使用

目录

awk使用shell中定义的变量

方法一:双引号+单引号+shell变量+单引号+双引号 

方法二:双引号+单引号+双引号+shell变量+双引号+单引号+双引号

方法三:export var ENVIRON["var"] 形式

方法四:使用awk -v选项

shell使用awk中定义的变量


awk使用shell中定义的变量

方法一:双引号+单引号+shell变量+单引号+双引号 

使用"'把shell变量包起来,即"'$var'";

这种写法大家无需改变用'括起awk程序的习惯,是老外常用的写法;这种写法其实际是双括号变为单括号的常量,传递给了awk.
例如:

var="abc"
awk 'BEGIN{print "'$var'"}'

方法二:双引号+单引号+双引号+shell变量+双引号+单引号+双引号

方法一类似,但使用"'"把shell变量包起来,即"'"$var"'"

如果变量的值中包含空格,为了shell不把空格作为分隔符,则应使用方法二。

例如:

var="this a test"
awk 'BEGIN{print "'"$var"'"}'

方法三:export var ENVIRON["var"] 形式

export变量,然后在awk中使用ENVIRON["var"]形式获取环境变量的值

例如:

var="this a test"; export var;
awk 'BEGIN{print ENVIRON["var"]}'  

方法四:使用awk -v选项

当变量不是很多时,建议使用这种方式。

例如:

var="this a test"
awk -v awkVar="$var" 'BEGIN{print awkVar}'

shell使用awk中定义的变量

“由awk向shell传递变量”,是用awk(sed/perl等也是一样)输出若干条shell命令,然后再用shell去执行这些命令。

例如:

eval $(awk 'BEGIN{print "var1='str1';var2='str2'"}')
# 或者
eval $(awk '{printf("var1=%s; var2=%s; var3=%s;",$1,$2,$3)}' abc.txt)

之后可以在当前shell中使用var1,var2等变量了。

执行命令

eval $(awk 'BEGIN{print "var1='str1';var2='str2'"}')
echo "var1=$var1 ----- var2=$var2"

输出

var1=str1 ----- var2=str2

相关文章

在Linux系统中,设置ARP防火墙可以通过多种方法实现,包括使...
在Linux环境下,使用Jack2进行编译时,可以采取以下策略来提...
`getid`命令在Linux系统中用于获取当前进程的有效用户ID(EU...
在Linux环境下,codesign工具用于对代码进行签名,以确保其完...
Linux中的`tr`命令,其英文全称是“transform”,即转换的意...
Linux中的ARP防火墙是一种用于防止ARP欺骗攻击的安全措施,它...