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

时间:2018-09-03 18:50:54

标签: bash awk ksh

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

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

我要寻找的是用命令行参数($ 1)替换“ EASYDOC”一词,以便执行为“ myScript.sh EASYDOC”,而lettin EASYDOC替换awk行的模式变量引用。 >

例如:

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

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

1 个答案:

答案 0 :(得分:2)

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

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

第二,除了字符串常量之外,您将无法对其他任何表达式使用正则表达式/.../语法,因此请将~运算符与$0一起使用:

awk -F":" -v arg="$1" '$0 ~ "^(something lets recognize " arg " as arg)+" { print $2 }'

例如:

$ var=foo

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

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