繁体   English   中英

Windows中的awk语法

[英]awk syntax in Windows

我试图在Windows上移植Unix脚本,而我在awk命令上苦苦挣扎。 这里是:

awk 'BEGIN { func=""; } /FUnction/ { func=$2 } /Lines/ { if (func != "") { printf func";"$2 }; func = ""; }'

我在这里读过一些主题,然后发现Windows在引号方面存在问题。 所以我这样纠正了它:

awk "BEGIN { func=\\""\\""; } /Function/ { func=$2 } /Lines/ { if (func != \\""\\"") { printf func\\"";\\""$2 }; func = \\""\\""; }"

但是我仍然遇到这个错误:

awk: BEGIN { func=""; } /Function/ { func=$2 } /Lines/ { if (func != ""){ print func";"$2 }; func = "";}  
             ^syntax error           ^syntax error           ^syntax error                   ^syntax error

(请注意, print func上没有错误)

有人说将awk代码放在一个单独的脚本中并调用它会更好,但是此awk命令已经在一个调用其他脚本的脚本中了……我想减少脚本的数量。 编辑:最终了解给定的文件是什么,这个awk命令应该做什么! 这里是:

给定的文件是这样的:

Function 'FunctionName'
Lines executed: X% of Y

\\Later on, i have this: 
File 'FileName'
Lines executed: X% of Y
Creating 'FileName.gcov'

应该使用awk命令找到单词Function ,获取其后的内容(即函数名),然后找到Lines ,获取其后的内容,并以此方式返回:

FunctionName;executed:%X of Y

然后我得到了sed命令来禁止executed:部分。 (\\ O /)

因此,考虑了一下:为什么要在单独的脚本中工作会更好,为什么它似乎不喜欢方括号中的每个字符? 所以我尝试了这个东西:

awk " \\" BEGIN { func=\\""\\""; } /Function/ { func=$2 } /Lines/ { if (func != \\""\\"") { printf func\\"";\\""$2 }; func = \\""\\""; }\\" "

它正在或多或少地起作用。 好吧,我不再有语法错误,它确实给了我一个输出文件,但这不是我想要的。 我得到的是这样的:

Function 'FunctionName'
Function 'FunctionName'
Lines executed: X% of Y
Lines executed: X% of Y
\\same for each function; dunno why the lines are doubled
\\Later on, i have this: 
File 'FileName'
File 'FileName'
Lines executed: X% of Y
Lines executed: X% of Y
Creating 'FileName.gcov'
Creating 'FileName.gcov'

因此,它只是重复输入文件的每一行。 不知道为什么。

因此,既然我了解了它需要做什么以及应该做什么,那么我将能够找到解决方案,但是仍然可以接受任何建议!

因此,我发现了问题所在,这很奇怪:

显然,您不能将funcfunction用作变量名。

而已。

所以,我刚刚更改了变量名称,它可以完美地工作-_-

awk " BEGIN {f=\"\" } /Function/ { f=$2 } /Lines/ { if (f!= \"\"){ print f\";\"$3 } f= \"\"} "

(注意:对于我的特殊问题,我还不得不将$ 2更改为$ 3,但这是因为输入文件的格式实际上并不相同。与awk无关)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM