awk中使用shell变量

 awk中使用shell的变量

A="2 days ago"

B=2

C=aoa

1)  通过将shell变量赋值给awk变量的方法

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

结果:2 days ago

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

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

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

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外加上双引号。

你可能感兴趣的:(职场,System,awk,awk,休闲,shell变量)