在 awk 編程中有各種各樣的流程控制語句,其中包括:
然而,對於本系列的這一部分,我們將闡述:if-else、for、while 和 do while 語句。請記住,我們已經在這個 awk 系列的第 6 部分介紹過如何使用 awk 的 next 語句。
1. if-else 語句如你想的那樣。if 語句的語法類似於 shell 中的 if 語句:
if(條件1){ 動作1 }else{ 動作2 }
在上述語法中,條件 1 和條件 2 是 awk 表達式,而動作 1 和動作 2 是當各自的條件得到滿足時所執行的 awk 命令。
當條件 1 滿足時,意味著它為真,那麼動作 1 被執行並退出 if 語句,否則動作 2 被執行。
if 語句還能擴展為如下的 if-else_if-else 語句:
if(條件1){ 動作1 }elseif(條件2){ 動作2}else{ 動作3}
對於上面的形式,如果條件 1 為真,那麼動作 1 被執行並退出 if 語句,否則條件 2 被求值且如果值為真,那麼動作 2 被執行並退出 if 語句。然而,當條件 2 為假時,那麼動作 3 被執行並退出 if 語句。
這是在使用 if 語句的一個實例,我們有一個用戶和他們年齡的列表,存儲在文件 users.txt 中。
我們要打印一個清單,顯示用戶的名稱和用戶的年齡是否小於或超過 25 歲。
aaronkilik@tecMint~$catusers.txtSarahL35FAaronKili40MJohnDoo20MKiliSeth49M
我們可以寫一個簡短的 shell 腳本來執行上文中我們的工作,這是腳本的內容:
#!/bin/bashawk'{ if($3<=25){ print"User",$1,$2,"islessthan25yearsold."; }else{ print"User",$1,$2,"ismorethan25yearsold"; }}'~/users.txt
然後保存文件並退出,按如下方式使腳本可執行並運行它:
$chmod+xtest.sh$./test.sh
輸出樣例
UserSarahLismorethan25yearsoldUserAaronKiliismorethan25yearsoldUserJohnDooislessthan25yearsold.UserKiliSethismorethan25yearsold2. for 語句
如果你想在一個循環中執行一些 awk 命令,那麼 for 語句為你提供一個做這個的合適方式,格式如下:
for(計數器的初始化;測試條件;計數器增加){ 動作 }
這裡,該方法是通過一個計數器來控制循環執行來定義的,首先你需要初始化這個計數器,然後針對測試條件運行它,如果它為真,執行這些動作並最終增加這個計數器。當計數器不滿足條件時,循環終止。
在我們想要打印數字0到10時,以下awk命令顯示for語句是如何工作的:
$awk'BEGIN{for(counter=0;counter<=10;counter++){printcounter}}'
輸出樣例
0 123456789103. while 語句
while 語句的傳統語法如下:
while(條件){ 動作 }
這個條件是一個 awk 表達式而動作是當條件為真時被執行的 awk 命令。
下面是一個說明使用 while 語句來打印數字 0 到 10 的腳本:
#!/bin/bash awk'BEGIN{counter=0; while(counter<=10){ printcounter; counter+=1; }}'
保存文件並使腳本可執行,然後運行它:
$chmod+xtest.sh$./test.sh
輸出樣例
0 123456789104. do while 語句
它是上文中 while 語句的一個變型,具有以下語法:
do{ 動作 }while(條件)
這輕微的區別在於,在 do while 語句下,awk 的命令在求值條件之前執行。使用上文 while 語句的例子,我們可以通過按如下所述修改 test.sh 腳本中的 awk 命令來說明 do while 語句的用法:
#!/bin/bashawk'BEGIN{counter=0; do{ printcounter; counter+=1;}while(counter<=10) }'
修改腳本之後,保存文件並退出。按如下方式使腳本可執行並執行它:
$chmod+xtest.sh$./test.sh
輸出樣例
0 123456789105.總結
這不是關於 awk 的流程控制語句的一個全面的指南,正如我早先提到的,在 awk 裡還有其他幾個流程控制語句。
盡管如此,awk 系列的這一部分使應該你明白了一個明確的基於某些條件控制的 awk 命令是如何執行的基本概念。
你還可以了解其余更多的流程控制語句以獲得更多關於該主題的理解。最後,在 awk 的系列下一節,我們將進入編寫 awk 腳本。
原文來自:http://os.51cto.com/art/201608/516548.htm
本文地址:http://www.linuxprobe.com/use-awk-work.html
http://xxxxxx/Linuxjc/1184695.html TechArticle