我实际上是在尝试使用linux ps从java命令中获取PID等。因为我可能有更多那个,我想打破最后一个字段并提取唯一的路径。
例如,我当前的命令是:
ps -ef |grep java |grep root|awk {'print $1"\t"$5"\t"$2"\t"$13}'
我的结果如下:
root 08:11 1234 -Djava.library.path=/opt/path/to/My_Application/libs
root 08:11 1234 -Djava.library.path=/opt/path/to/My_Other_Application/libs
我想让我的输出看起来像:
root 08:11 1234 My_Application
root 08:11 1234 My_Other_Application
我以为我已经弄明白了,但并不完全......我最接近的是尝试:
ps -ef |grep java |grep root|awk {'print $1"\t"$5"\t"$2"\t"substr($13,33,34)}'
让我:
root 08:11 1234 My_Application/libs
root 08:11 1234 My_Other_Application/libs
我想我可以放下第四个字段的最后5个字符,我试过了:
ps -ef |grep java |grep root|awk {'print $1"\t"$5"\t"$2"\t"substr($13,33,34)}'|awk '{print $1"\t"$2"\t"$3"\t"substr($4,1,(length($4)-5))}'
但是这并没有像我期望的那样丢掉最后5个字符......它似乎做了类似的事情:
root 08:11 1234 My_Applic
root 08:11 1234 My_Other_Application
更新:来自ps -ef statment的初始结果(shoudl be universal):
ps -ef UID PID PPID C STIME TTY TIME CMD ---- ---- ---- - ----- --- -------- --------------------- ----------------------------- root 1234 100 0 2013? 00:00:02 /usr/lib/jvm/java-1.6.0.0/jre/binjava -cp / opt / path / to / My_Application / jars / *:/ opt / path / to / My_Application / properties /:/ opt / path / to / My_Application / *:-Djava.util.logging.config.file = / opt / path / to / My_Application / properties / logging.props -DkeyFile = / opt / path_to / My_Application / properties / key.file - Djava.library.path = /选择/路径/到/ my_application之类/库 ......等等(传递了几个选项......但不需要)
答案 0 :(得分:1)
ps -ef |awk -F' +|/' '/root.*java/{print $1, $2, $3, $8}'
答案 1 :(得分:0)
如果您正在搜索提取应用程序名称的方法,则需要在awk中使用gsub
两次。检查此示例:
echo "-Djava.library.path=/opt/path/to/My_Application/libs" | \
awk '{ gsub(/\/[^\/]*$/, "", $4); gsub(/.*\//, "", $4); print $4}'
输出:
My_Application
这适用于awk
的每个版本。
可以优化最终命令,因为您不需要grep
命令,您可以直接过滤awk
中感兴趣的行:
ps -ef | awk '/^root.*\-Djava/ { gsub(/\/[^\/]*$/, "", $8); gsub(/.*\//, "", $8); print $8}'