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 hh24:mi:ss'\''),'\''"$1"'\'','\''"$3"'\'',trunc('\''"$5"'\''/1000/1000);"}'>>/tmp/c.sql
}
getcmdstat_sql "$node_name" "$node_ip"


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

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29822273/viewspace-2139609/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29822273/viewspace-2139609/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值