solaris上的awk脚本错误

时间:2013-10-08 14:17:15

标签: bash awk sh

我有以下脚本并尝试运行它:

BEGIN {
  start = 0
}

{
  if (match($0, "<WorkflowProcess ")) {
    startTag++
  }  

  if ((startTag < 2) || (endTag == startTag)) {
    print
  }

  if (match($0, "</WorkflowProcess>")) {
    endTag++
  }
}

但是我总是收到此错误:

awk:第6行附近的语法错误

awk:第6行附近的非法声明

awk:第10行附近的语法错误

awk:在第10行附近拯救

有什么想法?我试图通过dos2unix和tr -d'\ _'转换它,但它仍然是同样的问题。当我发送带文件名和扩展名的完整路径(/export/home/test/file.txt)时,输入参数在我看来是corect。 所有文件都有0777。

3 个答案:

答案 0 :(得分:1)

你是如何尝试运行该程序的?

如果你使用awk "... all that program ...",那么shell会将$0扩展到它自己的路径,这可能有一个领先的/ ...虽然现在我看着它,应该早点使用内部"失败。不过,查看精确的命令行会很有用。

顺便问一下,你为什么打电话给match?写作会更加惯用:

awk '
    /<WorkflowProcess /  { ++startTag }
    startTag < 2 || startTag == endTag { print }
    /</WorkflowProcess>/ { ++endTag }
'

避免明确使用$0

答案 1 :(得分:1)

在SunOS上nawk通常是更好的选择:

nawk -f script.awk /export/home/test/file.txt

答案 2 :(得分:0)

只是一个想法,在BEGIN规则中,您初始化start,而不是startTag,然后在下一个规则中增加startTag。我知道,这适用于GNU awk和所有,但也许你应该尝试初始化startTag

相关问题