免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5025 | 回复: 16
打印 上一主题 下一主题

求助:AWK中的单引号问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-07-23 10:05 |只看该作者 |倒序浏览
这几天学习使用awk遇到个问题
如:我输入
awk '{print "  '\' '  "} '  xyz.txt 时输出就是单引号
但是当我将这个单引号的输出写成

  awk '{print " select * from bt "  '\' '  " "} '  xyz.txt 运行时就会报错 invalid char ''' in expression

如果写成 awk '{print " select * from bt   '\' '   "} '  xyz.txt  输出就是select * from bt   ‘ 没有报错。


我理解的双引号是除了$ '  \不能关闭特殊含义,单引号是可以关闭$ '的特殊含义的.
希望高手讲解单引号和双引号的用法,或有什么具体的规则,谢谢

论坛徽章:
11
金牛座
日期:2015-03-19 16:56:22数据库技术版块每日发帖之星
日期:2016-08-02 06:20:00数据库技术版块每日发帖之星
日期:2016-04-24 06:20:00数据库技术版块每日发帖之星
日期:2016-04-13 06:20:00IT运维版块每日发帖之星
日期:2016-04-13 06:20:00数据库技术版块每日发帖之星
日期:2016-02-03 06:20:00数据库技术版块每日发帖之星
日期:2015-08-06 06:20:00季节之章:春
日期:2015-03-27 15:54:57羊年新春福章
日期:2015-03-27 15:54:37戌狗
日期:2015-03-19 16:56:41数据库技术版块每日发帖之星
日期:2016-08-18 06:20:00
2 [报告]
发表于 2010-07-23 10:08 |只看该作者
\047 代替 '

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-08-24 06:20:00综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00IT运维版块每日发帖之星
日期:2015-10-25 06:20:00IT运维版块每日发帖之星
日期:2015-11-06 06:20:00IT运维版块每日发帖之星
日期:2015-12-10 06:20:00平安夜徽章
日期:2015-12-26 00:06:302016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-04-15 06:20:00IT运维版块每日发帖之星
日期:2016-05-21 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-14 06:20:00
3 [报告]
发表于 2010-07-23 10:09 |只看该作者
13问讲的很详细啊。
‘’可以去掉一切特殊字符的原始含义。
“”除了¥,\外,可以去掉其他字符的特殊含义

论坛徽章:
0
4 [报告]
发表于 2010-07-23 11:03 |只看该作者
  1. 可以这样:

  2. [root@gdcxserver root]# awk -v v="'" 'BEGIN{print v"ok"v}'
  3. 'ok'
复制代码

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-08-24 06:20:00综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00IT运维版块每日发帖之星
日期:2015-10-25 06:20:00IT运维版块每日发帖之星
日期:2015-11-06 06:20:00IT运维版块每日发帖之星
日期:2015-12-10 06:20:00平安夜徽章
日期:2015-12-26 00:06:302016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-04-15 06:20:00IT运维版块每日发帖之星
日期:2016-05-21 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-14 06:20:00
5 [报告]
发表于 2010-07-23 11:15 |只看该作者
楼上的办法不错。同意使用。或是\047也可以

论坛徽章:
0
6 [报告]
发表于 2010-07-23 11:38 |只看该作者
使用双引号可引用除字符$、`、\外的任意字符或字符串。这些特殊字符分别为美元符号,
反引号和反斜线,对s h e l l来说,它们有特殊意义。如果使用双引号将字符串赋给变量并反馈
它,实际上与直接反馈变量并无差别。
单引号与双引号类似,不同的是s h e l l会忽略任何引用值。换句话说,如果屏蔽了其特殊
含义,会将引号里的所有字符,包括引号都作为一个字符串。

$  GIRL = 'girl'
$  echo " hello '$GIRL' "
hello 'girl'

论坛徽章:
0
7 [报告]
发表于 2010-07-23 14:42 |只看该作者
谢谢各位的热心解答,貌似有点理解了。

我现在有一个新的需求:x_bc.txt存放的是格式如下的数据:
2105
6012
2541
2145
现在我用x_bc.txt文件中的数据生成了相关的文件,如2105.txt、6012.txt等,
2105.txt等文件中的字段有多个如:
01   B25101   C32514
01   B26014   C32541
现在需求是想利用awk实现格式转换利用:引用x_bc.txt中的数据作为文件名变量,再逐个访问每一个文件修改格式,将类似2105.txt文件中的数据格式改为
01|B25101|C32514|
01|B26014|C32541|
不晓得这个该怎么做,请教。

论坛徽章:
0
8 [报告]
发表于 2010-07-23 15:07 |只看该作者
本帖最后由 bbgg1983 于 2010-07-23 15:08 编辑
  1. for i in `cat x_bc.txt`;do sed -ri 's/ +/|/g;s/$/|/' $i.txt;done
复制代码
回复 7# jscmc2004

论坛徽章:
0
9 [报告]
发表于 2010-07-23 15:14 |只看该作者
本帖最后由 好看的附件 于 2010-07-23 15:32 编辑
  1. cat x_bc.txt|xargs awk '{OFS="|";$1=$1;print $0"|"}'
复制代码
终于搞了个还算满意的。。--!

论坛徽章:
0
10 [报告]
发表于 2010-07-23 16:03 |只看该作者
本帖最后由 jscmc2004 于 2010-07-23 16:05 编辑

bbgg1983写的sed脚步,果然转换成功……不过我对sed不熟悉,唉~
学习ing~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP