我正在尝试加入 ps 和 pwdx 命令的输出。谁能指出我命令中的错误。
ps -eo %p,%c,%u,%a --no-headers | awk -F',' '{ for(i=1;i<=NF;i++) {printf $i",
"} ; printf pwdx $1; 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,", $0; "pwdx " $1 | getline; print gensub("^[0-9]*: *","","1",$0);}'
解释:
awk '{print pwdx $1}'
将连接 awk 变量 pwdx
(为空)和 $1
(pid)。因此,实际上,您在输出中只获得了 pid
。
为了运行一个命令并得到它的输出,你需要使用这个awk
结构:
awk '{"some command" | getline; do_something_with $0}'
# After getline, the output will be present in $0.
#For multiline output, use this:
awk '{while ("some command" | getline){do_something_with $0}}'
# Each individual line will be present in subsequent run of the while loop.
我是一名优秀的程序员,十分优秀!