使用AWK解析命名参数值

时间:2018-11-01 16:57:01

标签: bash awk

我正在尝试提出一个脚本/别名,该脚本/别名将迅速为我提供由应用程序运行的进程的列表。应用程序用于启动该过程的参数是命名参数,而不是位置

我需要提取 -u -s -svn

的参数值
$ ps -ef | grep pmdtm | grep -v grep

infa_adm 24581 31146  0 Oct24 ?        00:09:28 pmdtm -PR -gmh dhvifoapp03 
-gmp 6015 -guid ddcbd7ab-2ed0-4696-aea3-01573968b1bc -rst 300 
-s Address_Validator:wf_AddressValidator.s_m_AddressValidatorS 
-dn Session task instance [s_m_AddressValidatorS] -c pmserver.cfg 
-run 68_4262_654212_4_0_0_0_3263_77_2_2018_10_24___13_32_47_182 
-u Administrator -uns Native -crd rlVuBI4mUFi1V/7/jyrD6f9dMurwD9Yxddio6KDy/
zwlzM5rRDMeV766VoSBqb3Snjlvu849sTXlWpJ8WjzPomNOF4U87H7x5oy
JKbtxVg/vjR6gPwWwVSdEHvPjlpwSKPcuDx6glCbB1ksrvKCAzRsW1BTlP
GOfQbnd1ptnkO83iY14k4LUpJlx8+upBhwSxk9a0TPD44byO+/4Qhe7Mg== 
-svn Int01_dev -dmn Domain_dev 
-nma https://DHVIFOAPP03.RENTERS-CHOICE-INC.COM:6005 
-nmc w/Yt3IIMbmBQf+NnN1CAKmq5ab01nxZTJEA/YCf96Pb5zT9K9VFBO4+Nvqt
FuF8gzvqf/qHbw2tcXk4DnNP4m5vJvuEhxe9vQCN8pmpJytiZKV9Np7rBbapVzra
9TEOQVm9webRg8JZB70MQryVjQlGkJDpRs9cdOCXAu1aFhNE6LNF+
c5qhLdOz/vWCI3I2 -sid 3 
-hhn dhvifoapp04.renters-choice-inc.com -hpn 15555 
-hto 60 -rac 0 -SSL 
-rsn RAC_dev ServiceResilienceTimeout=300

我可以使用以下命令将其提取为单个字段,但是如何获取多个值?

$ echo“正在运行的作业列表==>”; ps -ef | grep pmdtm | grep -v grep | awk -F“ -s”“ {print \ $ 2}” | awk -F“”“ {print \ $ 1}”

List of running jobs ==>
Address_Validator:wf_AddressValidator.s_m_AddressValidatorS

所需的输出=

List of running jobs ==>
Address_Validator:wf_AddressValidator.s_m_AddressValidatorS | Administrator | Int01_dev

1 个答案:

答案 0 :(得分:0)

您可以在grep中执行多个“ OR”表达式,如下所示:

grep -E "^-s|^-u|^-svn" < file.txt

以上内容仅打印出以-s-u或-svn开头的行。基于此,以下命令将完全满足您的要求:

echo "List of running jobs ==> "  $(ps -ef | grep pmdtm | grep -v grep | grep -E "^-s|^-u|^-svn" | awk '{ print $2 " |" }')

使用上述命令在帖子上运行内容时,得到以下输出:

List of running jobs ==>  Address_Validator:wf_AddressValidator.s_m_AddressValidatorS | Administrator | Int01_dev |

最后会有尾随|,但是可以单独修剪掉。

已更新:

在下面发表评论后,请更新命令以完全满足您的需求。

echo -e "List of running jobs ==> \n "  $(ps -ef | grep pmdtm | grep -v grep | awk 'BEGIN { RS = " -"} $1 ~ /^s$|^u$|^svn$/ { print $2,"|"}')

它确实假定了以下几点:

  • 所有命名参数将具有非空的命名参数。否则,它将仅输出空白。
  • 所有命名参数均以-开头,紧随其后的是参数本身。