【问题标题】:awk : Not able to access the passed parameterawk : 无法访问传递的参数
【发布时间】:2016-02-12 17:26:07
【问题描述】:

我正在从 shell 脚本调用myAwk.awk,如下所示,

awk -f myAwk.awk -v inputKeyword="SEARCH" file2.xml

$bash: cat myAwk.awk
BEGIN{
print "This is from awk script:"  inputKeyword; //This prints SEARCH string. Fine.
}

/<record / { i=1 }
i { a[i++]=$0 }
/<\/record>/ {
    if (found) {
        for (i=1; i<=length(a); ++i) print a[i] >> resultFile.xml
    }
    i=0;
    found=0
}
/<keyword>inputKeyword<\/keyword>/ { found=1 }  //Looks like the value for inputKeyword is not available here.
//There are no errors though.

如何使inputKeyword 的值在我需要的地方可用?

【问题讨论】:

  • 不能和/.../一起使用,用~来匹配。

标签: bash shell awk scripting


【解决方案1】:

你需要换行,

/<keyword>inputKeyword<\/keyword>/ { found=1 }

$0 ~ "<keyword>"inputKeyword"</keyword>" { found=1 }

如果匹配模式 (regex) 在变量中,则不需要 //awk 不会插入 // 之间的内容。它会被认为只是一个字符串。

【讨论】:

  • $0 持有什么价值?为什么我需要$0
  • @user2488578, $0 将有当前行。它是一个awks 内置变量。
【解决方案2】:

根据手册页,您应该在-f 之前传递选项:

SYNOPSIS

   `gawk [ POSIX or GNU style options ] -f program-file [ -- ] file ...`
   `gawk [ POSIX or GNU style options ] [ -- ] program-text file ...`

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-08
    相关资源
    最近更新 更多