awk单引号+shell变量+域变量的示例分析

这篇文章给大家分享的是有关awk单引号+shell变量+域变量的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

[rdb@mdb tmp]$ echo TOM | awk '{print "select * from A where name='\''''"$1"'\''"}'
select * from A where name='TOM'
[rdb@mdb tmp]$ echo TOM | awk '{print "select * from A where name='\''"$1"'\''"}'
select * from A where name='TOM'
[rdb@mdb tmp]$

两者的name部分放大后为:
name=' \ ' ' ' ' " $1 " ' \ ' ' "
name=' \ ' ' " $1 " ' \ ' ' "

前者比后者在$1前双引号前多了两个单引号,但是为啥两者的效果相同呢,我的理解是这两个多出来的单引号内部没有任何值,为空,所以效果一致,如果在该处多加几个单引号也是一致的,例如:
echo TOM | awk '{print "select * from A where name='\''''''''''''''"$1"'\''"}'

在awk的print中引用拼接域变量时,该变量应该被双引号引起来:
"$1"
然后要给该值加上单引号,每个单引号需要转义,转义规则为:两个单引号,然后再在其内部加上\',完成后为:'\'',放大后为:' \' '
连起来就是:'\''"$1"'\''
这个就是第二个name=' \ ' ' " $1 " ' \ ' '


关于引用shell变量问题:
shell变量在awk中要被使用,需要用双引号+单引号配合使用" '$a' "
例如:
[rdb@mdb tmp]$ a=10
[rdb@mdb tmp]$ echo 90|awk '{print ""$1"/"'$a'"="$1/"'$a'"}'
90/10=9
[rdb@mdb tmp]$
放大后为:echo 90|awk '{print " " $1 " / " '$a' " = " $1 / " '$a ' " }'


function getcmdstat_sql()
{
grep cmdstat_ 13_20170519102523.info_all|awk -F"[:=,]+" '{print "insert into tbl_rdb_cmdstats(dc_area,node_name,node_ip,chk_time,statname,total_calls,total_timing) values ('\'''${dc_area}''\'','\'''${1}''\'','\'''${2}''\'',to_date('\'''${fn_date}''\'','\''yyyy-mm-dd hh34:mi:ss'\''),'\''"$1"'\'','\''"$3"'\'',trunc('\''"$5"'\''/1000/1000);"}'>>/tmp/c.sql
}
getcmdstat_sql "$node_name" "$node_ip"


-F"[:=,]+"代表:,=,“,”冒号,等号,逗号都是分隔符

感谢各位的阅读!关于“awk单引号+shell变量+域变量的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!