免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123456
最近访问板块 发新帖
打印 上一主题 下一主题

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

论坛徽章:
0
51 [报告]
发表于 2007-01-19 17:19 |只看该作者
这个代码测试过,可以在gentoo下工作的很好。就是用的我提到的那个思想,用bash写的

论坛徽章:
0
52 [报告]
发表于 2007-01-19 17:27 |只看该作者
原帖由 Iambitious 于 2007-1-19 17:18 发表
#!/bin/bash

if [ "$1x" = "x" ];then
        target=0
else
        target=$1
fi
ps -ef | awk '{if (NR > 1) {print $2 " " $3}}' > relation
index=0
parent[0]=-1
while  ...

呵呵。不错

论坛徽章:
0
53 [报告]
发表于 2007-01-19 17:31 |只看该作者
原帖由 awk就是awp加ak 于 2007-1-19 17:19 发表

确实,这种方法直接找到就输出了,没有必要缓存起来,也没有必要递归 ^_^



这个方法不一定能输出正确的结果,因为ps -ef输出的结果,并不是完全排序的,所以有可能出现这种情况:
我们要找1的所有子进程

5 4
4 1

此时程序不会输出5这个进程。

论坛徽章:
0
54 [报告]
发表于 2007-01-19 17:32 |只看该作者
原帖由 一梦如是 于 2007-1-19 16:53 发表
没人看我这段代码 -_-!
[code]#!/bin/bash
ps -eo pid,ppid |
awk '
function listchildpid(pid){
        if ($2 == pid) {
                print $1;
                a[$1]=$1;
        }
}
{
    ...



你的不错, 不过这个问题不自然就递归了, Hoho

不过我的目标是模拟pstree....不过输出可能复杂些.....

论坛徽章:
0
55 [报告]
发表于 2007-01-19 17:34 |只看该作者
原帖由 Iambitious 于 2007-1-19 17:31 发表



这个方法不一定能输出正确的结果,因为ps -ef输出的结果,并不是完全排序的,所以有可能出现这种情况:
我们要找1的所有子进程

5 4
4 1

此时程序不会输出5这个进程。


虽然没有排序, 但是貌似派生关系是排序的...好像不会丢结果...

论坛徽章:
0
56 [报告]
发表于 2007-01-19 17:37 |只看该作者
原帖由 Edengundam 于 2007-1-19 17:34 发表


虽然没有排序, 但是貌似派生关系是排序的...好像不会丢结果...


那就ok,简洁,高效,perfect的程序

论坛徽章:
0
57 [报告]
发表于 2007-01-19 17:47 |只看该作者
偶保留可读性第一的观点 ^_^

论坛徽章:
0
58 [报告]
发表于 2007-01-19 17:52 |只看该作者
原帖由 awk就是awp加ak 于 2007-1-19 17:47 发表
偶保留可读性第一的观点 ^_^


呵呵...恩^_^可读对维护代码有很大帮助. 不过美丽的代码代表了敏捷的思维hoho...

PS: 刚才差点把你投诉了...引用时候不小心点错了.....

论坛徽章:
0
59 [报告]
发表于 2007-01-19 19:48 |只看该作者
  1. #!/bin/bash
  2. ps -eo pid,ppid |
  3. awk '
  4. {
  5.         a[upid]=0;
  6.         for(i in a){
  7.                 if ($2 == i) {
  8.                         for(j = 0; j < a[i]; j++){
  9.                                 printf "  ";
  10.                         }
  11.                         print i":"$1;
  12.                         a[$1]=a[i]+1;
  13.                 }
  14.         }
  15. }
  16. ' upid=$1

复制代码

再次完善了下,增加层次输出功能。
类似gnu的ps -H的输出
  1. ps -eo ppid,pid,comm -H
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP