免费注册 查看新帖 |

Chinaunix

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

awk 递归支持的如何? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-01-19 10:07 |只看该作者 |倒序浏览
大家可以先做了个测试,测试代码:
  1. ps -ef |awk '
  2. function listChilds(pPid){

  3.         print "listing ... " pPid ", " childs[pPid, 0];
  4.         if (childs[pPid, 0]) for (i = 0; i < childCount[pPid]; i++){
  5.        
  6.                 child = childs[pPid, i];
  7.                 print pPid": " child;
  8.                 print "--listChilds(" child ")";
  9.                 listChilds(child);
  10.         }
  11. }

  12. NR > 1 { childs[$3, childCount[$3]++] = $2; }
  13. END {
  14.         listChilds(pid);
  15. }
  16. ' pid=1
复制代码

论坛徽章:
0
2 [报告]
发表于 2007-01-19 10:09 |只看该作者
我这边部分输出
listing ... 1, 2
1: 2
--listChilds(2)
listing ... 2,
1: 3
--listChilds(3)
listing ... 3,
1: 4

中间正常结果省略 ... 然后

listing ... 6993,
4736: 6994
--listChilds(6994)
listing ... 6994,
1: 43
--listChilds(43)
listing ... 43,
1: 62
--listChilds(62)
listing ... 62,
1: 208
--listChilds(20
listing ... 208,
1: 330
--listChilds(330)

。。。后面是死递归输出

论坛徽章:
0
3 [报告]
发表于 2007-01-19 10:12 |只看该作者
我在 HP-UX 和 Linux 下面测试了,结果类似,暂时无法理解此现象。

论坛徽章:
0
4 [报告]
发表于 2007-01-19 10:16 |只看该作者
大家帮我试试看,如果有不同结果请告诉我 ^_^

论坛徽章:
0
5 [报告]
发表于 2007-01-19 10:20 |只看该作者
不然我就总结如下:
“对 awk 栈保护措施的质量有嫌疑”了,因为有时候还是好使得  

论坛徽章:
0
6 [报告]
发表于 2007-01-19 10:29 |只看该作者
应该是和参数有关...局部变量的声明比较特别.

那个 i 很可能引起了问题....

论坛徽章:
0
7 [报告]
发表于 2007-01-19 10:46 |只看该作者
i 用到之前都初始化。声明成局部的也一样,试过了。

btw,5楼总结有误。

论坛徽章:
0
8 [报告]
发表于 2007-01-19 11:02 |只看该作者
原帖由 awk就是awp加ak 于 2007-1-19 10:46 发表
i 用到之前都初始化。声明成局部的也一样,试过了。

btw,5楼总结有误。



这样声明我这里不死循环了...
如果不这样, i child 默认使用全局变量....:em11:
PS: 被你害得>_<工作总结才写了一句话......呜呜, 今天加班你要请我吃饭....hoho
[code]
function listChilds(pPid,    i, child){
[code]

[ 本帖最后由 Edengundam 于 2007-1-19 11:03 编辑 ]

论坛徽章:
0
9 [报告]
发表于 2007-01-19 11:08 |只看该作者
噢,这样声明会有效果:
for (local i; i < ....
我再试试看

论坛徽章:
0
10 [报告]
发表于 2007-01-19 11:09 |只看该作者
原帖由 Edengundam 于 2007-1-19 11:02 发表



这样声明我这里不死循环了...
如果不这样, i child 默认使用全局变量....:em11:
PS: 被你害得>_<工作总结才写了一句话......呜呜, 今天加班你要请我吃饭....hoho
[code]
function listChilds(pPi ...

好,就请你吃饭
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP