+ -
当前位置:首页 → 问答吧 → Unix Shell 提取文本问题--在线等!!!!

Unix Shell 提取文本问题--在线等!!!!

时间:2011-03-14

来源:互联网

各位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  ---(第一个进程树,下面依次类推)

作者: mobiebie   发布时间: 2011-03-14

ps出来后直接干掉不就行了?干嘛还要绕一下,每个进程去杀?
kill `ps -ef|grep ...|grep -v "grep"|awk '{print $2}'`

作者: dzhxc   发布时间: 2011-03-14

哈哈,谢谢,终于有人回答。
第一,直接杀掉有风险,因为作的是投资银行的支持,一个不小心损失担当不起啊。
第二,用你的命令可能杀不干净,要从每个独立进程的子进程开始杀。
  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
复制代码
比如上面三个进程
每个都要独立地 从子进程杀到父进程。至于为什么我也不清楚,我不是现在系统的开发团队,他们给的指示就是那样杀的。
分别生成命令的目的是让上倒班的同事可以再核实一便,因为风险问题。

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

作者: mobiebie   发布时间: 2011-03-14

格式因为进程名太长,实际格式是

123 xxxxxxxxx
   1234xxxxxxxxx
        3234xxxxxxxx

321 xxxxxxxx
    232xxxxxxxxx
        454xxxxxxxx

作者: mobiebie   发布时间: 2011-03-14