> root# ps -ef | grep [j]ava | awk '{print $2,$9}'
> 45134 -Dapex=APEC
> 45135 -Dapex=JAAA
> 45136 -Dapex=APEC
我需要把第一个的第一个APEC作为第一个PID,第三行的APEC和第二个PID,最后一个作为第三个PID。
我尝试了awk,但没有预期的结果。
> First_PID =ps -ef | grep [j]ava | awk '{print $2,$9}'|awk '{if ($0 == "[^0-9]" || $1 == "APEC:") {print $0; exit;}}'
预期结果应如下所示。
> First_PID=45134
> Second_PID=45136
> Third_PID=45135
4条答案
按热度按时间hc8w905p1#
使用您展示的示例和尝试,请尝试以下
awk
代码。在GNUawk
中编写和测试。wfveoks02#
不如这样吧:
说明:
input=(...)
-数组中的输入数据,用于测试printf '%s\n' "${input[@]}"
-打印input
数组,每行一个元素grep APEC
-仅保留包含APEC
的行sed -n
-执行sed
,但不自动打印sed -n '2p'
-只打印第二行gywdnpxw3#
如果你只想让APEC先...
如果可能,请使用数组,而不要使用那些顺序命名的变量。
x7rlezfr4#
在读了大家的想法后,我最终得出了一个非常简单的解决方案。
初始PID=$(ps -ef| grep亚太经合组织|grep -v grep| awk '{打印$2}'| Sed -n '1 p')第二个PID=$(ps -ef| grep亚太经合组织|grep -v grep| awk '{打印$2}'|如果您有任何问题,请使用下面的代码:|grep JAAA| grep -v grep| awk '{打印$2}')