[英]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'
因此,它只是重復輸入文件的每一行。 不知道為什么。
因此,既然我了解了它需要做什么以及應該做什么,那么我將能夠找到解決方案,但是仍然可以接受任何建議!
因此,我發現了問題所在,這很奇怪:
顯然,您不能將func
或function
用作變量名。
而已。
所以,我剛剛更改了變量名稱,它可以完美地工作-_-
awk " BEGIN {f=\"\" } /Function/ { f=$2 } /Lines/ { if (f!= \"\"){ print f\";\"$3 } f= \"\"} "
(注意:對於我的特殊問題,我還不得不將$ 2更改為$ 3,但這是因為輸入文件的格式實際上並不相同。與awk無關)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.