我有以下脚本并尝试运行它:
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。
答案 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
。