尝试加入 ps 和 pwdx linux 命令的输出

Trying to join output from ps and pwdx linux commands

我正在尝试加入 ps 和 pwdx 命令的输出。谁能指出我命令中的错误。

ps -eo %p,%c,%u,%a --no-headers | awk -F',' '{ for(i=1;i<=NF;i++) {printf $i", 
"} ; printf pwdx ; printf "\n" }'

我希望每行的最后一列是进程目录。但它只是显示 $1 的值而不是命令输出 pwdx $1

这是我的输出样本(1 行):

163957, processA , userA , /bin/processA -args, 163957

我预计

163957, processA , userA , /bin/processA -args, /app/processA

谁能指出我可能遗漏了什么

试试这个:

ps -eo %p,%c,%u,%a --no-headers | awk -F',' '{ printf "%s,", [=10=]; "pwdx "  | getline; print gensub("^[0-9]*: *","","1",[=10=]);}'

解释:

awk '{print pwdx }' 将连接 awk 变量 pwdx(为空)和 </code>(pid)。因此,实际上,您在输出中只得到 <code>pid

为了运行一个命令并得到它的输出,你需要使用这个awk结构:

awk '{"some command" | getline; do_something_with [=11=]}'
# After getline, the output will be present in [=11=].

#For multiline output, use this:
awk '{while ("some command" | getline){do_something_with [=11=]}}'
# Each individual line will be present in subsequent run of the while loop.

简化您的示例以专注于如何在 awk 中执行 pwdx 命令并将此命令的结果捕获到 awk 变量中,因为这是您遇到问题的地方:

ps -eo %p,%c,%u,%a --no-headers | awk -F',' '{ system("pwdx ") | getline vpwdx; printf vpwdx }'

产生:

  15651665: /
  16651690: /
  16901691: /home/fpm
 169134248: /home/fpm
3424834254: /home/fpm/tmp
3425440181: /home/fpm/UDK2015
...