免费注册 查看新帖 |

Chinaunix

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

问awk调用shell变量的问题 [复制链接]

论坛徽章:
1
狮子座
日期:2013-11-13 22:28:35
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-12-12 00:22 |只看该作者 |倒序浏览
awk调用shell变量,看网上说双引号和单引号连用就行。不过我试验时出现了下面这样的情况:
[rcl@ubuntu:shell]$ i=1.2.3.4;echo "1.2.3.4.5"|awk '/'"$i"'/{print}'
1.2.3.4.5
[rcl@ubuntu:shell]$ i=1.2.3.4;echo "1.2.3.4.5"|awk '/"'$i'"/{print}'
[rcl@ubuntu:shell]$ i=1.2.3.4;echo "1.2.3.4.5"|awk '/'"$i"'/{print "'$i'"}'
1.2.3.4
[rcl@ubuntu:shell]$ i=1.2.3.4;echo "1.2.3.4.5"|awk '/'"$i"'/{print '"$i"'}'
1.20.30.4
[rcl@ubuntu:shell]$ i=1.2.3.4;echo "1.20.3.4.5"|awk '/'"$i"'/{print}'

从我这个试验看,在regex里得写成'"$i"'才对,在语句里恰好相反得写成"'$i'"才行。
这是为什么呢?

第二,为什么在语句里写成'"$i"'时,print的结果会在中间的两个数字后面加个0呢?

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
2 [报告]
发表于 2009-12-12 01:08 |只看该作者
以下等价
i=1.2.3.4;echo "1.2.3.4.5"|awk '/'"$i"'/{print '"$i"'}'
echo 1.2.3.4.5|awk '/1.2.3.4/{print 1.2.3.4}'
echo |awk '{print 1.2.3.4}'
echo |awk '{print 1.2 .3 .4}'
echo |awk '{print 1.2 0.3 0.4}'

论坛徽章:
1
狮子座
日期:2013-11-13 22:28:35
3 [报告]
发表于 2009-12-12 17:14 |只看该作者
多谢楼上。不过帖子的目的不是问怎么print 1.2.3.4出来……
我是想知道'"和"'的不同结果的原因。

论坛徽章:
0
4 [报告]
发表于 2009-12-13 11:26 |只看该作者
原帖由 chenryn 于 2009-12-12 17:14 发表
多谢楼上。不过帖子的目的不是问怎么print 1.2.3.4出来……
我是想知道'"和"'的不同结果的原因。


不存在嵌套关系,分段看就很明白了

awk '/'"$i"'/{print}'的参数是下头3段

'/'  "$i"   '/{print}'

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
5 [报告]
发表于 2009-12-13 11:28 |只看该作者
其实并不存在awk"调用"shell变量,其实依然是shell在调shell变量.
如果真的要调,那也只有gawk可以使用环境变量.
我觉得首先要明白其原理

论坛徽章:
1
狮子座
日期:2013-11-13 22:28:35
6 [报告]
发表于 2009-12-13 18:56 |只看该作者
原帖由 mwm5 于 2009-12-13 11:26 发表


不存在嵌套关系,分段看就很明白了

awk '/'"$i"'/{print}'的参数是下头3段

'/'  "$i"   '/{print}'

awk的参数怎么会是'/'这些呢?我试了一下,是会出错的呀。
另请lss帮忙说说这个原理,多谢多谢~~

论坛徽章:
0
7 [报告]
发表于 2009-12-13 21:42 |只看该作者
原帖由 chenryn 于 2009-12-13 18:56 发表

awk的参数怎么会是'/'这些呢?我试了一下,是会出错的呀。
另请lss帮忙说说这个原理,多谢多谢~~



这样写只是为了好理解

[ 本帖最后由 juffun 于 2009-12-13 21:47 编辑 ]

论坛徽章:
0
8 [报告]
发表于 2009-12-14 18:07 |只看该作者
先进行 shell变量解析 了,再传给了awk
至于第四种情况出现的0,是awk print函数把1.2.3.4解析成了三个数字了,(1.2)(.3)(.4)
应该有个变量定义了默认格式的输出(试过OFMT没试出效果)

论坛徽章:
0
9 [报告]
发表于 2009-12-14 20:11 |只看该作者

论坛徽章:
1
狮子座
日期:2013-11-13 22:28:35
10 [报告]
发表于 2009-12-14 20:31 |只看该作者
原帖由 mwm5 于 2009-12-14 20:11 发表
看下置顶的13问就明白了~~

http://bbs.chinaunix.net/viewthr ... p;page=3#pid1482452
http://bbs.chinaunix.net/viewthr ... p;page=4#pid1511745

谢楼上三位。不过脑子还是没转过弯来,不知道怎么理解这个'/'或者'}'等等……
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP