簡體   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