2015-12-18 36 views
0

我在没有成功的答案中搜索了......在RHEL Linux上,第一条命令列出了这条命令(我把那些我想要测试的东西放在这里。 ..):

ps -eaf | grep lsnr | grep -v ' LISTENER ' | grep -v grep 
oracle 10258  1 0 2014 ?  01:34:43 /logicielPR1/oracle/product/11.2.0.4/bin/tnslsnr PRXPLO -inherit 
oracle 10442  1 0 2014 ?  00:24:30 /logicielTE1/oracle/product/11.2.0.4/bin/tnslsnr TECHIMIO -inherit 
oracle 10473  1 0 2014 ?  00:28:50 /logicielTE1/oracle/product/11.2.0.4/bin/tnslsnr TEIAC -inherit 
oracle 10566  1 0 2014 ?  00:24:50 /logicielTE1/oracle/product/11.2.0.4/bin/tnslsnr TEIMG -inherit 
oracle 14192  1 0 2014 ?  00:22:09 /logicielPR1/oracle/product/11.2.0.4/bin/tnslsnr PROCTM2 -inherit 
oracle 27167  1 0 2014 ?  00:19:26 /logicielTE1/oracle/product/11.2.0.4/bin/tnslsnr TEOCTM -inherit 
oracle 36854  1 0 2014 ?  00:19:59 /logicielTE1/oracle/product/11.2.0.4/bin/tnslsnr TEANA -inherit 
oracle 37235  1 0 May20 ?  00:08:32 /logicielPR1/oracle/product/11.2.0.4/bin/tnslsnr PRCHIMIO -inherit 
oracle 45141  1 0 Jun03 ?  00:08:02 /logicielST1/oracle/product/11.2.0.4/bin/tnslsnr PRIACS -inherit 
oracle 48241  1 0 Sep25 ?  00:04:39 /logicielPR1/oracle/product/11.2.0.4/bin/tnslsnr PRINL -inherit 
oracle 48708  1 0 Sep25 ?  00:03:27 /logicielTE1/oracle/product/11.2.0.4/bin/tnslsnr TEINL2 -inherit 

我想提取上面的名称(如:第一行PRXPLO),所以我做的:

ps -eaf | grep lsnr | grep -v ' LISTENER ' | grep -v grep | awk -F "${ORA_LISTENER_HEADER}|${ORA_LISTENER_HEADER_UPPER}|tnslsnr " '{print $2}' 
PRXPLO -inherit 
TECHIMIO -inherit 
TEIAC -inherit 
TEIMG -inherit 
PROCTM2 -inherit 
TEOCTM -inherit 
TEANA -inherit 
PRCHIMIO -inherit 
PRIACS -inherit 
{print $2} 
PRINL -inherit 
TEINL2 -inherit 

*注:在此命令,“$ {ORA_LISTENER_HEADER } | $ {ORA_LISTENER_HEADER_UPPER} | tnslsnr“将等于”tnslsnr“

显然,包含“{print $ 2}”的行不应该存在,但我找不到它的来源。 我知道我可以简单地通过grep排除它,但我更愿意理解我做错了什么。

有人可以帮我解决这个问题吗?

谢谢大家。

+1

'PS -cargs = $(p纤ep TNSLSNR)| awk'$ 2!=“LISTENER”{print $ 2}''? – anishsane

回答

5

为了缓解问题,只需使用一个电话AWK:

ps -eaf | awk '/lsnr/ && !/ LISTENER/{print $(NF-1)}' 
+0

非常聪明...谢谢。 –

3

是的,你必须通过grep排除它。 awk是一个单独的进程,它通过运行整个链来显示在grep进程列表中。

ps -eaf | grep lsnr | grep -v ' LISTENER ' | grep -v grep | grep -v awk | awk -F "${ORA_LISTENER_HEADER}|${ORA_LISTENER_HEADER_UPPER}|tnslsnr " '{print $2}' 
+0

但是在同一个脚本中,这一行: ps -eaf | grep pmon | grep -v grep | awk -F_'{print $ 3}' 没有这个问题...为什么? 对不起,我不是脚本专家... –

+0

awk命令包含您正在查找的单词“lsnr”。因此,包含awk命令的ps行将包含在awk命令' –

+0

的输入中,好吧,这是我的一个误解。有趣的是,我的同事都没有想过这件事。 –