免费注册 查看新帖 |

Chinaunix

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

awk变量传递给SHELL [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-12-13 14:57 |只看该作者 |倒序浏览
从SHELL中,调用AWK的时候,可以通过 -v 选项将SHELL变量传递给AWK内使用.

但是,在AWK里面操作完成好的变量如何传递给SHELL使用呢?

论坛徽章:
0
2 [报告]
发表于 2007-12-13 15:06 |只看该作者
让awk将变量值按一定格式输出到STDOUT上,然后由shell解析
通常使用这种方式

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
3 [报告]
发表于 2007-12-13 15:09 |只看该作者
eval

论坛徽章:
0
4 [报告]
发表于 2007-12-13 15:46 |只看该作者
能不能再具体点?如果有实例就最好了。

我刚好也遇到此问题。

多谢!

论坛徽章:
0
5 [报告]
发表于 2007-12-13 15:48 |只看该作者
按2楼说的,就是将输出重定向到临时文件
然后在临时文件中解晰?
好象不是很方便,但也是个解决办法.

3楼说的内容不明白.
给出答案同时给点合理的解释说明,方便大家比较好.
再次向你表示谢谢.

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
6 [报告]
发表于 2007-12-13 15:50 |只看该作者
原帖由 yourkeychen 于 2007-12-13 15:48 发表
按2楼说的,就是将输出重定向到临时文件
然后在临时文件中解晰?
好象不是很方便,但也是个解决办法.

3楼说的内容不明白.
给出答案同时给点合理的解释说明,方便大家比较好.
再次向你表示谢谢.


$ unset a
$ eval $(awk 'BEGIN{print "a=1"}')
$ echo $a
1

论坛徽章:
0
7 [报告]
发表于 2007-12-13 16:00 |只看该作者
原帖由 ly5066113 于 2007-12-13 15:09 发表
eval

怎么用

论坛徽章:
0
8 [报告]
发表于 2007-12-13 16:21 |只看该作者
谢谢ly5066113

经测试验证,可以使用,是我想要的结果.非常感谢.

另外在问一下
如果将  eval $(awk 'BEGIN{print "a=1"}')
改为     eval $(awk 'BEGIN{a=1}')
将失败,就是说,AWK必须要向外输出a才行.
如果我是AWK想向SHELL传递不止一个变量的话,
就需要多条print语句才行了
eval $(awk 'BEGIN{print "a=1"; print "b=2"}')
经验证测试,
a 是 1
b 是 2

正解.

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
9 [报告]
发表于 2007-12-13 16:31 |只看该作者
原帖由 yourkeychen 于 2007-12-13 16:21 发表
谢谢ly5066113

经测试验证,可以使用,是我想要的结果.非常感谢.

另外在问一下
如果将  eval $(awk 'BEGIN{print "a=1"}')
改为     eval $(awk 'BEGIN{a=1}')
将失败,就是说,AWK必须要向外输出a才行.
...


eval $(awk 'BEGIN{print "a=1 b=2"}')
或者
eval $(awk 'BEGIN{print "a=1;b=2"}')
即可,不需要多个print

论坛徽章:
0
10 [报告]
发表于 2007-12-13 17:09 |只看该作者
再深入一下,帮我分析为何地变量MyVar赋值 Y不成功呢?

我可以肯定其中有个分区的使用率已经超过了70%


df -h | grep -v Filesystem | awk '{print $5}' | sed 's/%//g' | eval $(awk '$1>70 {print "MyVar=Y"}')

下面是通过 sh -x 收集到的执行过程:

+ df -h
+ grep -v Filesystem
+ awk '{print $5}'
+ sed s/%//g
++ awk '$1>70 {print "MyVar=Y"}'
+ eval MyVar=Y
++ MyVar=Y

当执行 echo $MyVar 时,没有返回值 Y
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP