當你回顧全部到目前爲止咱們已經覆蓋的 awk 實例,從 awk 系列的開始,你會注意到各類實例的全部指令是順序執行的,即一個接一個地執行。但在某些狀況下,咱們可能但願基於一些條件進行文本過濾操做,即流程控制語句容許的那些語句。html
在 awk 編程中有各類各樣的流程控制語句,其中包括:linux
然而,對於本系列的這一部分,咱們將闡述:if-else
、for
、while
和 do while
語句。請記住,咱們已經在這個 awk 系列的第 6 部分介紹過如何使用 awk 的 next
語句。git
如你想的那樣。if 語句的語法相似於 shell 中的 if 語句:github
if (條件 1) { 動做 1 } else { 動做 2 }
在上述語法中,條件 1
和條件 2
是 awk 表達式,而動做 1
和動做 2
是當各自的條件獲得知足時所執行的 awk 命令。shell
當條件 1
知足時,意味着它爲真,那麼動做 1
被執行並退出 if 語句
,不然動做 2
被執行。編程
if 語句還能擴展爲以下的 if-else_if-else
語句:bash
if (條件 1){ 動做 1 } else if (條件 2){ 動做 2 } else{ 動做 3 }
對於上面的形式,若是條件 1
爲真,那麼動做 1
被執行並退出 if 語句
,不然條件 2
被求值且若是值爲真,那麼動做 2
被執行並退出 if 語句
。然而,當條件 2
爲假時,那麼動做 3
被執行並退出 if 語句
。less
這是在使用 if 語句的一個實例,咱們有一個用戶和他們年齡的列表,存儲在文件 users.txt 中。ide
咱們要打印一個清單,顯示用戶的名稱和用戶的年齡是否小於或超過 25 歲。測試
aaronkilik@tecMint ~ $ cat users.txt Sarah L 35 F Aaron Kili 40 M John Doo 20 M Kili Seth 49 M
咱們能夠寫一個簡短的 shell 腳原本執行上文中咱們的工做,這是腳本的內容:
#!/bin/bash awk ' { if ( $3 <= 25 ){ print "User",$1,$2,"is less than 25 years old." ; } else { print "User",$1,$2,"is more than 25 years old" ; } }' ~/users.txt
而後保存文件並退出,按以下方式使腳本可執行並運行它:
$ chmod +x test.sh $ ./test.sh
輸出樣例
User Sarah L is more than 25 years old User Aaron Kili is more than 25 years old User John Doo is less than 25 years old. User Kili Seth is more than 25 years old
若是你想在一個循環中執行一些 awk 命令,那麼 for 語句
爲你提供一個作這個的合適方式,格式以下:
for ( 計數器的初始化 ; 測試條件 ; 計數器增長 ){ 動做 }
這裏,該方法是經過一個計數器來控制循環執行來定義的,首先你須要初始化這個計數器,而後針對測試條件運行它,若是它爲真,執行這些動做並最終增長這個計數器。當計數器不知足條件時,循環終止。
在咱們想要打印數字 0 到 10 時,如下 awk 命令顯示 for 語句是如何工做的:
$ awk 'BEGIN{ for(counter=0;counter<=10;counter++){ print counter} }'
輸出樣例
0 1 2 3 4 5 6 7 8 9 10
while 語句的傳統語法以下:
while ( 條件 ) { 動做 }
這個條件
是一個 awk 表達式而動做
是當條件爲真時被執行的 awk 命令。
下面是一個說明使用 while
語句來打印數字 0 到 10 的腳本:
#!/bin/bash awk ' BEGIN{ counter=0; while(counter<=10){ print counter; counter+=1; } }'
保存文件並使腳本可執行,而後運行它:
$ chmod +x test.sh $ ./test.sh
輸出樣例
0 1 2 3 4 5 6 7 8 9 10
它是上文中 while
語句的一個變型,具備如下語法:
do { 動做 } while (條件)
這輕微的區別在於,在 do while
語句下,awk 的命令在求值條件以前執行。使用上文 while
語句的例子,咱們能夠經過按以下所述修改 test.sh 腳本中的 awk 命令來講明 do while
語句的用法:
#!/bin/bash awk ' BEGIN{ counter=0; do{ print counter; counter+=1; } while (counter<=10) }'
修改腳本以後,保存文件並退出。按以下方式使腳本可執行並執行它:
$ chmod +x test.sh $ ./test.sh
輸出樣例
0 1 2 3 4 5 6 7 8 9 10
這不是關於 awk 的流程控制語句的一個全面的指南,正如我早先提到的,在 awk 裏還有其餘幾個流程控制語句。
儘管如此,awk 系列的這一部分使應該你明白了一個明確的基於某些條件控制的 awk 命令是如何執行的基本概念。
你還能夠了解其他更多的流程控制語句以得到更多關於該主題的理解。最後,在 awk 的系列下一節,咱們將進入編寫 awk 腳本。
via: http://www.tecmint.com/use-flow-control-statements-with-awk-command/
做者:Aaron Kili
譯者:robot527
校對:wxy