awk條件陳述式,awk語句
條件陳述式用於在執行操作之前做一個測試。在前面的章節中,我們看到了模式比對規則的一些樣本。模式比對規則本質上就是影響輸入迴圈的條件運算式。在這一部分,我們主要就在action中所使用的條件陳述式進行探討。條件陳述式以if開頭,並計算放在圓括弧中的運算式。文法是:
if (expression)
action1
[else
action2]
如果條件運算式expression的值為真(非零或非空),就執行action1 。當存在else語句時,如果條件運算式的值為假(零或空) ,則執行action2。一個條件運算式可能包含算術運算子、關係操作符、或布爾操作符,這些都在awk指令碼中討論過。也許最簡單的條件運算式是測試一個變數是否非零。
if (x) print x
如果x是零, print語句將不執行。如果x是一個非零值,將列印x的值。也可以測試x是否等於另一個值:
if ( x == y ) print x
注意, "=="是關係操作符而"="是賦值操作符。我們還可以用模式比對操作符"~"來測試x是否與一個模式比對:
if ( x ~ /[yY](es)?/ ) print x
以下是幾個補充的文法要點。如果操作時由多個語句組成的,要用一對大括弧將操作括起來。
if (expression)
statement1
statement2
}
awk對大括弧和語句的位置沒有特殊的要求(和sed不同)。左大括弧放在條件運算式後面,可以與條件運算式位於一行也可以在下一行。第一條語句可以緊跟左大括弧或從下一行開始,右大括弧放在最好一條語句的後面,可以與最後一條語句位於同一行也可以在下一行。在大括弧的前後允許有空格或定位字元。雖然沒有要求語句縮排書寫,但這樣可以改善可讀性。
右大括弧和else後面的分行符號是可選的。
if ( expression) action1
[else action2]
如果在action1後面加一個分號表示結束, action1後面的換行也是可選的。
if ( expression) action1; [else action2]
如果在同一行上用分號分隔多個語句,同樣需要使用大括弧。
在前面的文章中,我們曾看見過一段指令碼用於計算學生平均成績。我們可以用一個條件來判斷某個學生是否及格。
if ( avg >= 65 )
grade = "Pass"
else
grade = "Fail"
賦給grade的值取決於運算式"avg >=65" 的計算結果是真還是假。
可以用多個條件陳述式來測試多個條件中的某個是否為真。例如,也許學生的成績要用字母分級表示,而不是用及格或不及格來表示。以下用一個條件結構根據學生的平均分來指定一個字母成績:
if (avg >= 90) grade = "A"
else if (avg >= 80) grade = "B"
else if (avg >= 70) grade = "C"
else if (avg >= 60) grade = "D"
else grade = "F"
應該注意到的一個重要事情是,這種連續條件只有當一個條件運算式計算結果為真時才停止求值,這時將跳過其他的條件。如果沒有一個條件運算式的計算結果為真,將執行最後的else部分,運行預設操作,在這種情況下為grade賦值"F" 。
參考資料:http://www.linuxawk.com/communication/543.html
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。