在awk命令中使用bash脚本$ 1参数

use*_*757 6 linux bash shell awk

我想创建一个bash脚本,它接受一个参数并awk用于打印if

这是一个孤儿过程:

#find_orphan.sh :

ps -elf | awk '/$1/&&!/awk/ {if ($5 == 1){print $15}}'
Run Code Online (Sandbox Code Playgroud)

不幸的是,我遇到问题,以便将$ 1作为bash参数呈现..

如果我不使用$ 1运行它,我的程序将工作:

ps -elf | awk '/some_program/&&!/awk/ {if ($5 == 1){print $15}}'
Run Code Online (Sandbox Code Playgroud)

我真的需要能够在bash脚本参数中指定awk搜索模式.

有帮助吗?

anu*_*ava 7

使用awk -v var=val一个命令行的值传递给AWK和使用$0 ~ val语法使用正则表达式来比较一下:

ps -elf | awk -v arg="$1" '$0 ~ arg && !/awk/ && $5 == 1{print $15}'
Run Code Online (Sandbox Code Playgroud)

没有正则表达式:

ps -elf | awk -v arg="$1" 'index($0, arg) && !/awk/ && $5 == 1{print $15}'
Run Code Online (Sandbox Code Playgroud)


Dru*_*nix 2

Shell 变量仅在双引号(或根本没有引号)内扩展,而不是单引号。你可以尝试

ps -elf | awk '/'$1'/&&!/awk/ {if ($5 == 1){print $15}}'
Run Code Online (Sandbox Code Playgroud)

对于 awk,我认为 anubhavas 解决方案更好,但这也适用于其他工具的类似情况。