awk中使用shell变量

 awk中使用shell的变量shell

A="2 days ago" ide

B=2 spa

C=aoa orm

1)  经过将shell变量赋值给awk变量的方法 字符串

awk -v format="$A" 'BEGIN{print format}' it

结果:2 days ago io

2)  经过shell执行命令的方式,来将变量的值传给awk form

shell中执行的时候会将单引号中的内容做为变量传送给awk程序。 class

若是没有单引号shell会解析meta字符({),将{print 2}解析成命令块,所以awk会出现语法错误。根据此特性咱们能够来引用shell的变量,例如 awk

1awk 'BEGIN{print '$B'}'用单引号将meta字符关闭,而$Bshell解析成值2,最后将BEGIN{print 2}传给awk,从而达到引用shell变量的目的。

2)若是此处shell变量的值为字符串,如C=aoa, awk 'BEGIN{print '$C'}'awk会认为aoaawk中的变量,因此输出空;若是要输出字符串能够加上双引号,如awk 'BEGIN{print "'$C'"}'将两个双引号分别放到先后两组单引号中,shell传给awk的值为BEGIN{print "aoa"},因此输出aoa

3)若是shell变量中包含有其余meta字符,如A="2 days ago"(空格是meta charater),

使用awk 'BEGIN{print "'"$A"'"}'来将2 days ago中的meta charater关闭,再传给awk

"$A"用来消除值中的meta charater,在单引号中的双引号在进入awk后来用来将2 days ago做为一个字符串来print

在使用system命令时,可能会有这种状况:

awk 'BEGIN{system("date -d \"2 days aog\"")}'若是要把2 days ago换成$A,能够用上面的方法:awk 'BEGIN{system("date -d \"'"$A"'\"")}'

总结:能够先写好awk语句,在须要引用变量的时候,将变量先后用单引号来分割成三部分,其中变量交给shell来处理,当$Ameta charater的时候,须要在$A外加上双引号。

相关文章
相关标签/搜索