0

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

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 '\r' 转换它,但它仍然是同样的问题。当我发送带有文件名和扩展名(/export/home/test/file.txt)的完整路径时,我认为输入参数是正确的。所有文件都有 0777。

4

3 回答 3

1

在 SunOSnawk上通常是更好的选择:

nawk -f script.awk /export/home/test/file.txt
于 2013-10-08T15:22:38.273 回答
1

您如何尝试运行该程序?

如果你使用awk "... all that program ...",那么 shell 将扩展$0到它自己的路径,它可能有一个前导/......虽然,现在我看它,它应该更早地与 internal 失败"。尽管如此,查看精确的命令行还是很有用的。

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

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

这避免了$0完全显式使用。

于 2013-10-08T15:15:10.287 回答
0

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

于 2013-10-08T17:27:31.430 回答