AWK - 如何使用命令行参数进行过滤 ($1)

AWK - How to filter using a command line argument ($1)

我有一个包含以下行的脚本:

RHEL7.5> cat myScript.sh
...
awk -F":" '/^(EASYDOC)+/ {print }' /etc/oratab
...
RHEL7.5>

我正在寻找的是用命令行参数 ($1) 替换单词 "EASYDOC" 以便作为 "myScript.sh EASYDOC" 执行,让 EASYDOC 替换 awk 行的模式变量引用.

例如:

awk -F":" '/^(something lets recognize  as arg)+/ {print }' /etc/oratab

将是可取的。 提前致谢。内斯托.

首先,要将 shell 变量传递到您的 awk 脚本中,请使用 -v:

awk -F":" -v arg="" ...

其次,除了字符串常量之外,您将无法使用正则表达式 /.../ 语法,因此请使用 ~ 运算符和 [=16=]:

awk -F":" -v arg="" '[=11=] ~ "^(something lets recognize " arg " as arg)+" { print  }'

例如:

$ var=foo

$ cat file
something lets recognize foo as arg:shut the door:the color is red

$ awk -F":" -v arg=$var '[=12=] ~ "^(something lets recognize " arg " as arg)+" { print  }' file
shut the door