2012-07-17 58 views
5

這是awk中的一個基本問題。但我在這方面遇到問題,我不知道爲什麼。問題是,當我在一個單一的線路上運行awk命令如通過分割行來運行awk

awk 'BEGIN {} {print $0;}' FILE 

然後代碼被perfecctly運行

但是,如果我如

awk ' 
BEGIN 
{ 
} 
{ 
     print $0; 
}' FILE 

線之間分割的代碼它給我錯誤地指出,BEGIN應該有一個動作部分。我想知道,因爲它是格式相同的代碼,爲什麼我得到這個錯誤。對我來說,解決這個問題非常重要,因爲我將在awk中編寫大量代碼,對於我來說,每次都很難將其格式化並將其整合到一行中。你能幫我解答一下嗎?謝謝。注意。我在shell環境中運行這個awk

+0

如果您在BEGIN塊中不需要任何代碼,則應該將其刪除。否則......相信錯誤信息告訴你的是什麼! ;-)嘗試'awk'BEGIN {}; {print $ 0;}'FILE'來查看是否生成錯誤消息。祝你好運。 – shellter 2012-07-17 20:24:53

回答

5

添加'{' right after the BEGIN`,你會不是得到錯誤信息。

開幕paren {BEGIN需要在same行作爲BEGIN。因此,改變你有什麼

awk ' 
BEGIN 
{ 

awk ' 
BEGIN { 

,你不會得到錯誤信息。

manual確實聲明「BEGIN和END規則必須有動作」,所以這可能是另一個問題。這

awk 'BEGIN {} ... 

似乎有點奇怪,我(和沒什麼沒有理由,這一點,如果沒有發生任何事情)

@下面Birei的有益意見解釋說,這些語句將「解析的方式將在兩種情況下都是不同的,下一行中打開的'{'被解析爲沒有模式的操作(與BEGIN無關),而同一行表示BEGIN規則的空操作。

+1

+1,這兩種情況下的解析都會有所不同。下一行中的開放paren被解析爲沒有模式的操作(與BEGIN無關),而同一行則表示BEGIN規則的空操作。 – Birei 2012-07-17 20:45:34

+0

當然,你可以根據你的意願完成你自己的答案,不要擔心信用,我不介意:-) – Birei 2012-07-17 21:03:25

+0

@Birei Credit在信貸到期:-) – Levon 2012-07-17 21:15:55