免费注册 查看新帖 |

Chinaunix

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

Unix Shell 提取文本问题--在线等!!!! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-03-14 16:48 |只看该作者 |倒序浏览
各位Unix大虾,我想请教一个Unix 抽取文本信息的问题。
比如使用ps命令过滤出以下进程信息,我把它们输出到一个process.temp的文件里面(ps -ef | grep … > process.temp)
25604 sh -c GetNLoadReutersMaintD.sh -j RTEQCHD -c 60
    25617 /bin/ksh /export/applications/datman/prod/bin/GetNLoadReutersMaintD.s
      14068 /bin/ksh /export/applications/datman/prod/bin/load_reuters.sh -j RT
        1256  /bin/ksh /export/applications/ftiaip/prod/boxv2r1/bin/runmap_reut
          1411  MessageMapper --outputdir=/export/applications/ftiaip/prod/boxv

28068 sh -c GetNLoadReutersPriceD.sh -j RTEQPRCD -c 60
    28078 /bin/ksh /export/applications/datman/prod/bin/GetNLoadReutersPriceD.s
      5356  /bin/ksh /export/applications/datman/prod/bin/load_reuters_prices.s
        5654  /bin/ksh /export/applications/datman/prod/bin/load_reuters.sh -j
          7698  /bin/ksh /export/applications/ftiaip/prod/boxv2r1/bin/runmap_re
            7780  MessageMapper --outputdir=/export/applications/ftiaip/prod/bo
  5634  sh -c (DM_PAGE_SEV_LVL=0 load_bloomberg.sh -j BBGBACHL -c EURO)
    5846  /bin/ksh /export/applications/datman/prod/bin/load_bloomberg.sh -j BB
      6856  /bin/ksh runmap_bb_govtagency -c Default173 -i 173 -m /export/appli
        7019  MessageMapper --mapparameter=DataType=BBGOVTA --config=Default173

请问我如何才能用循环分别把每一个进程树分别提取出来,如果是使用 ps等组合命令,两个循环来组成命令(kill),我已经实现,只是速度太慢。

如:
25604 sh -c GetNLoadReutersMaintD.sh -j RTEQCHD -c 60
    25617 /bin/ksh /export/applications/datman/prod/bin/GetNLoadReutersMaintD.s
      14068 /bin/ksh /export/applications/datman/prod/bin/load_reuters.sh -j RT
        1256  /bin/ksh /export/applications/ftiaip/prod/boxv2r1/bin/runmap_reut
          1411  MessageMapper --outputdir=/export/applications/ftiaip/prod/boxv
我的目的是分别生成命令:
kill 1411 1256 14068 25617 25604  ---(第一个进程树,下面依次类推)

论坛徽章:
0
2 [报告]
发表于 2011-03-14 17:06 |只看该作者
ps出来后直接干掉不就行了?干嘛还要绕一下,每个进程去杀?
kill `ps -ef|grep ...|grep -v "grep"|awk '{print $2}'`

论坛徽章:
0
3 [报告]
发表于 2011-03-14 17:17 |只看该作者
哈哈,谢谢,终于有人回答。
第一,直接杀掉有风险,因为作的是投资银行的支持,一个不小心损失担当不起啊。
第二,用你的命令可能杀不干净,要从每个独立进程的子进程开始杀。
  1. 25604 sh -c GetNLoadReutersMaintD.sh -j RTEQCHD -c 60
  2.     25617 /bin/ksh /export/applications/datman/prod/bin/GetNLoadReutersMaintD.s
  3.       14068 /bin/ksh /export/applications/datman/prod/bin/load_reuters.sh -j RT
  4.         1256  /bin/ksh /export/applications/ftiaip/prod/boxv2r1/bin/runmap_reut
  5.           1411  MessageMapper --outputdir=/export/applications/ftiaip/prod/boxv
  6.   28068 sh -c GetNLoadReutersPriceD.sh -j RTEQPRCD -c 60
  7.     28078 /bin/ksh /export/applications/datman/prod/bin/GetNLoadReutersPriceD.s
  8.       5356  /bin/ksh /export/applications/datman/prod/bin/load_reuters_prices.s
  9.         5654  /bin/ksh /export/applications/datman/prod/bin/load_reuters.sh -j
  10.           7698  /bin/ksh /export/applications/ftiaip/prod/boxv2r1/bin/runmap_re
  11.             7780  MessageMapper --outputdir=/export/applications/ftiaip/prod/bo
  12.   5634  sh -c (DM_PAGE_SEV_LVL=0 load_bloomberg.sh -j BBGBACHL -c EURO)
  13.     5846  /bin/ksh /export/applications/datman/prod/bin/load_bloomberg.sh -j BB
  14.       6856  /bin/ksh runmap_bb_govtagency -c Default173 -i 173 -m /export/appli
  15.         7019  MessageMapper --mapparameter=DataType=BBGOVTA --config=Default173
复制代码
比如上面三个进程
每个都要独立地 从子进程杀到父进程。至于为什么我也不清楚,我不是现在系统的开发团队,他们给的指示就是那样杀的。
分别生成命令的目的是让上倒班的同事可以再核实一便,因为风险问题。

无论怎么样,还是很感谢,这是我第一次发贴

论坛徽章:
0
4 [报告]
发表于 2011-03-14 17:19 |只看该作者
格式因为进程名太长,实际格式是

123 xxxxxxxxx
   1234xxxxxxxxx
        3234xxxxxxxx

321 xxxxxxxx
    232xxxxxxxxx
        454xxxxxxxx

论坛徽章:
0
5 [报告]
发表于 2011-03-14 18:12 |只看该作者
回复 1# mobiebie


    先用 sed或awk 把进程号取出来,放到一个文件中在(kill),你看着样慢不!

论坛徽章:
0
6 [报告]
发表于 2011-03-14 19:03 |只看该作者

论坛徽章:
0
7 [报告]
发表于 2011-03-15 14:12 |只看该作者
我这个情况不是因为kill慢,而是在提取信息(把每一组独立的进程树抓取出来)再生成相应的kill命令的时候慢。因为我用两个循环(嵌套)来实现。每次都要用到 重复的ps组合命令,效率很低,现在尝试优化。所遇到的问题就是怎么分别把每组独立的进程树从文本中提取出来~~~谢谢!!!

论坛徽章:
0
8 [报告]
发表于 2011-03-15 17:13 |只看该作者
你试试用pstree倒出来...然后再用二叉树法使用awk把你的进程按子<-父的方式显示出来.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP