免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4808 | 回复: 8

awk system调用sql语句问题 [复制链接]

论坛徽章:
0
发表于 2009-05-07 22:52 |显示全部楼层
目的:
用awk 的system搞用一个sql语句,sql语句中的where条件来自一个file的$1

cat file

100079
100081
100082
100083
100087
100088
100089
100090

实现:
awk '{system("mysql -u root -proot mydatabase -Bse \"select id,name from tables where id=""\047"$1"\047""\042")}' file


想问一下 id=""\047"$1"\047""\042")}' file 中047 042的意思, 知道047 042 代表双引号和单引号,不明白为什么这样加单引号和双引号

为什么不能写成
awk '{system("mysql -u root -proot mydatabase -Bse \"select id,name from tables where id=$1\"")}' file

论坛徽章:
0
发表于 2009-05-07 23:33 |显示全部楼层
echo | awk '{printf("mysql -u root -proot mydatabase -Bse \"select id,name from tables where id=$1\"")}'


echo | awk '{printf("mysql -u root -proot mydatabase -Bse \"select id,name from tables where id=""\047"$1"\047""\042")}'

论坛徽章:
0
发表于 2009-05-08 16:10 |显示全部楼层
楼上这位你要表达什么?

论坛徽章:
0
发表于 2009-05-08 16:41 |显示全部楼层
原帖由 steel_lei 于 2009-5-8 16:10 发表
楼上这位你要表达什么?

执行一下不就知道区别了?

论坛徽章:
0
发表于 2009-05-09 00:09 |显示全部楼层
原帖由 steel_lei 于 2009-5-7 22:52 发表
目的:
用awk 的system搞用一个sql语句,sql语句中的where条件来自一个file的$1

cat file

100079
100081
100082
100083
100087
100088
100089
100090

实现:
awk '{system("mysql -u root -proo ...


原语句的条件是id='100079',你的条件是id=100079,一个是字符串比较,一个是数值比较.
\047是双引号,\042是单引号
也可以写成:
awk '{system("mysql -u root -proot mydatabase -Bse \"select id,name from tables where id='\''"$1"'\''\"")}' file

论坛徽章:
0
发表于 2009-05-09 11:05 |显示全部楼层
原帖由 zhangshebao 于 2009-5-9 00:09 发表


原语句的条件是id='100079',你的条件是id=100079,一个是字符串比较,一个是数值比较.
\047是双引号,\042是单引号
也可以写成:
awk '{system("mysql -u root -proot mydatabase -Bse \"select id,name fro ...



谢谢,方法可行
能不能帮我把id=后面的那些双引号与单引给我拆分一下,我对id=后面这些转义双引号和单引号有点糊涂
比如这样
id='\'      ' "$1" '                \''               \"        "                     )}'                   file
我拆分的好像不对

论坛徽章:
0
发表于 2009-05-09 13:21 |显示全部楼层
awk ' ......id=  '           \'           '           "        $1        "     '    \'        '      \"          "   )}' file
                                                                                                                 ^awk后双引号,前面可空
                                                                                                     ^传给子进程shell的双引号,前后可空
                                                                                              ^shell解释的外层前单引号,前面不能空
                                                                                    ^shell转义给awk,前后不能空,空了awk程序就断开了
                                                                               ^shell的外层后单引号,目的是要传一个转义单引号给awk
                                                                          ^awk system参数的前双引号
                                                      ^关了双引号,好引用$1
                  ^关了单引号,好让\'传给awk一个转义的'
最外层的引号(无论是单引号或双引号),是shell解释的,shell将引号内的内容当成一个不可拆分的整体,去掉最外层引号后传给awk,多双引号连在一起,中间无空格,仍作为1个位置参数传给awk
         echo "aaa"bbb"ccc""ddd"'eee'fff'ggg''hhh'
等价于 echo aaabbbcccdddeeefffggghhh
aaa ccc ddd在双引号内
bbb fff在引号外
eee ggg hhh在单引号内
所有引号全部是外层引号,全部被shell吃掉后传给echo命令

[ 本帖最后由 zhangshebao 于 2009-5-9 13:25 编辑 ]

论坛徽章:
0
发表于 2009-05-09 14:47 |显示全部楼层
原帖由 zhangshebao 于 2009-5-9 13:21 发表
awk ' ......id=  '           \'           '           "        $1        "     '    \'        '      \"          "   )}' file
                                                                     ...

十分感谢

论坛徽章:
12
辰龙
日期:2013-10-23 11:06:312015年迎新春徽章
日期:2015-03-04 09:50:28拜羊年徽章
日期:2015-03-03 16:15:43戌狗
日期:2014-12-22 14:49:17申猴
日期:2014-05-14 17:25:17狮子座
日期:2014-04-26 18:50:20双子座
日期:2014-04-04 12:32:31巨蟹座
日期:2014-03-13 00:04:36技术图书徽章
日期:2014-03-12 17:50:42白羊座
日期:2014-02-28 23:46:54丑牛
日期:2013-11-15 05:36:11CU十四周年纪念徽章
日期:2016-01-18 04:54:01
发表于 2010-11-13 18:45 |显示全部楼层
awk ' ......id=  '           \'           '           "        $1        "     '    \'        '      ...
zhangshebao 发表于 2009-05-09 13:21



大哥,要通过怎样的学习,理解上才能达到这样的程度?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP