【问题标题】:AWK - How to filter using a command line argument ($1)AWK - 如何使用命令行参数进行过滤 ($1)
【发布时间】:2018-09-03 18:50:54
【问题描述】:

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

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

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

例如:

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

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

【问题讨论】:

    标签: bash awk ksh


    【解决方案1】:

    首先,要将 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
    

    【讨论】:

    • 嗨,贾斯!!!谢谢你快速的回复。它解决了我的问题(我尝试使用 -v 标志,但同时使用正则表达式斜杠“/.../”:从未想过使用“$0 ~ xxx”。再次感谢。
    猜你喜欢
    • 2019-02-20
    • 1970-01-01
    • 1970-01-01
    • 2015-03-21
    • 1970-01-01
    • 2013-04-13
    • 1970-01-01
    • 1970-01-01
    • 2013-03-15
    相关资源
    最近更新 更多