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
我有一个包含以下行的脚本:
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