> root# ps -ef | grep [j]ava | awk '{print $2,$9}'
> 45134 -Dapex=APEC
> 45135 -Dapex=JAAA
> 45136 -Dapex=APEC我需要把第一次亚太经合组织的第一次PID,亚太经合组织的第三行,第二次PID,最后一次PID作为第三次PID。
我试过了,但没有预期的结果。
> 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发布于 2022-11-22 12:41:21
在显示的示例和尝试中,请尝试遵循awk代码。用GNU awk编写和测试。
ps -ef | grep [j]ava |
awk '
{
val=$2 OFS $9
match(val,/([0-9]+) -Dapex=APEC ([0-9]+) -Dapex=JAAA\s([0-9]+)/,arr)
print "First_PID="arr[1],"Second_PID=",arr[3],"Third_PID=",arr[2]
}
'发布于 2022-11-22 15:53:27
这个怎么样:
$ input=("1 APEC" "2 JAAA" "3 APEC")
$ printf '%s\n' "${input[@]}" | grep APEC | sed -n '2p'
3 APEC解释:
input=(...) -在数组中输入数据,对于testingprintf '%s\n' "${input[@]}" - print input数组,每个linegrep APEC保持包含APEC onlysed -n的一行-运行sed而没有自动printsed -n '2p' -只打印第二行。
发布于 2022-11-22 22:23:00
如果你只想先得到APECs ..。
ps -ef |
awk '/java[ ].* -Dapex=APEC/{print $2" "$9; next; }
/java[ ]/{non[NR]=$2" "$9}
END{ for (rec in non) print non[rec] }'如果可能的话,使用一个数组来代替那些通常命名为vars的数组。
mapfile -t pids < <( ps -ef | awk '/java[ ].* -Dapex=APEC/{print $2; next; }
/java[ ]/{non[NR]=$2} END{ for (rec in non) print non[rec] }' )https://stackoverflow.com/questions/74532675
复制相似问题