自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

awk系列:在awk中如何使用流程控制語句

開源 系統(tǒng)運維
當(dāng)你回顧所有到目前為止我們已經(jīng)覆蓋的 awk 實例,從 awk 系列的開始,你會注意到各種實例的所有指令是順序執(zhí)行的,即一個接一個地執(zhí)行。但在某些情況下,我們可能希望基于一些條件進行文本過濾操作,即流程控制語句允許的那些語句。

 

當(dāng)你回顧所有到目前為止我們已經(jīng)覆蓋的 awk 實例,從 awk 系列的開始,你會注意到各種實例的所有指令是順序執(zhí)行的,即一個接一個地執(zhí)行。但在某些情況下,我們可能希望基于一些條件進行文本過濾操作,即流程控制語句允許的那些語句。

在 awk 編程中有各種各樣的流程控制語句,其中包括:

  • if-else 語句
  • for 語句
  • while 語句
  • do-while 語句
  • break 語句
  • continue 語句
  • next 語句
  • nextfile 語句
  • exit 語句

然而,對于本系列的這一部分,我們將闡述:if-else、for、while 和 do while 語句。請記住,我們已經(jīng)在這個 awk 系列的第 6 部分介紹過如何使用 awk 的 next 語句。

1. if-else 語句

如你想的那樣。if 語句的語法類似于 shell 中的 if 語句:

  1. if  (條件 1) { 
  2.      動作 1 
  3. else { 
  4.       動作 2 

在上述語法中,條件 1 和條件 2 是 awk 表達式,而動作 1 和動作 2 是當(dāng)各自的條件得到滿足時所執(zhí)行的 awk 命令。

當(dāng)條件 1 滿足時,意味著它為真,那么動作 1 被執(zhí)行并退出 if 語句,否則動作 2 被執(zhí)行。

if 語句還能擴展為如下的 if-else_if-else 語句:

  1. if (條件 1){ 
  2.      動作 1 
  3. else if (條件 2){ 
  4.       動作 2 
  5. else
  6.      動作 3 

對于上面的形式,如果條件 1 為真,那么動作 1 被執(zhí)行并退出 if 語句,否則條件 2 被求值且如果值為真,那么動作 2 被執(zhí)行并退出 if 語句。然而,當(dāng)條件 2 為假時,那么動作 3 被執(zhí)行并退出 if 語句。

這是在使用 if 語句的一個實例,我們有一個用戶和他們年齡的列表,存儲在文件 users.txt 中。

我們要打印一個清單,顯示用戶的名稱和用戶的年齡是否小于或超過 25 歲。

  1. aaronkilik@tecMint ~ $ cat users.txt 
  2. Sarah L         35      F 
  3. Aaron Kili      40      M 
  4. John  Doo       20      M 
  5. Kili  Seth      49      M 

我們可以寫一個簡短的 shell 腳本來執(zhí)行上文中我們的工作,這是腳本的內(nèi)容:

  1. #!/bin/bash 
  2. awk ' { 
  3.         if ( $3 <= 25 ){ 
  4.            print "User",$1,$2,"is less than 25 years old." ; 
  5.         } 
  6.         else { 
  7.            print "User",$1,$2,"is more than 25 years old" ; 
  8.         } 
  9. }'    ~/users.txt 

然后保存文件并退出,按如下方式使腳本可執(zhí)行并運行它:

  1. $ chmod +x test.sh
  2. $ ./test.sh 

輸出樣例

  1. User Sarah L is more than 25 years old 
  2. User Aaron Kili is more than 25 years old 
  3. User John Doo is less than 25 years old. 
  4. User Kili Seth is more than 25 years old 

2. for 語句

如果你想在一個循環(huán)中執(zhí)行一些 awk 命令,那么 for 語句為你提供一個做這個的合適方式,格式如下:

  1. for ( 計數(shù)器的初始化 ; 測試條件 ; 計數(shù)器增加 ){ 
  2.       動作 

這里,該方法是通過一個計數(shù)器來控制循環(huán)執(zhí)行來定義的,首先你需要初始化這個計數(shù)器,然后針對測試條件運行它,如果它為真,執(zhí)行這些動作并最終增加這個計數(shù)器。當(dāng)計數(shù)器不滿足條件時,循環(huán)終止。

在我們想要打印數(shù)字 0 到 10 時,以下 awk 命令顯示 for 語句是如何工作的:

  1. $ awk 'BEGIN{ for(counter=0;counter<=10;counter++){ print counter} }' 

輸出樣例

  1. 10 

3. while 語句

while 語句的傳統(tǒng)語法如下:

  1. while ( 條件 ) { 
  2.           動作 

這個條件是一個 awk 表達式而動作是當(dāng)條件為真時被執(zhí)行的 awk 命令。

下面是一個說明使用 while 語句來打印數(shù)字 0 到 10 的腳本:

  1. #!/bin/bash 
  2. awk ' BEGIN{ counter=0; 
  3.         while(counter<=10){ 
  4.               print counter; 
  5.               counter+=1; 
  6.         } 
  7. }' 

保存文件并使腳本可執(zhí)行,然后運行它:

  1. $ chmod +x test.sh 
  2. $ ./test.sh 

輸出樣例

  1. 10 

4. do while 語句

它是上文中 while 語句的一個變型,具有以下語法:

  1. do { 
  2.      動作 
  3.  while (條件) 

這輕微的區(qū)別在于,在 do while 語句下,awk 的命令在求值條件之前執(zhí)行。使用上文 while 語句的例子,我們可以通過按如下所述修改 test.sh 腳本中的 awk 命令來說明 do while 語句的用法:

  1. #!/bin/bash 
  2. awk ' BEGIN{ counter=0; 
  3.         do{ 
  4.             print counter; 
  5.             counter+=1; 
  6.         } 
  7.         while (counter<=10) 
  8. }' 

修改腳本之后,保存文件并退出。按如下方式使腳本可執(zhí)行并執(zhí)行它:

  1. $ chmod +x test.sh 
  2. $ ./test.sh 

輸出樣例

  1. 10 

總結(jié)

這不是關(guān)于 awk 的流程控制語句的一個全面的指南,正如我早先提到的,在 awk 里還有其他幾個流程控制語句。

盡管如此,awk 系列的這一部分使應(yīng)該你明白了一個明確的基于某些條件控制的 awk 命令是如何執(zhí)行的基本概念。

你還可以了解其余更多的流程控制語句以獲得更多關(guān)于該主題的理解。***,在 awk 的系列下一節(jié),我們將進入編寫 awk 腳本。

責(zé)任編輯:龐桂玉 來源: Linux中國
相關(guān)推薦

2010-05-11 12:53:58

Unix awk

2016-08-10 16:07:08

awkLinux開源

2016-08-11 09:18:33

awkShellLinux

2016-10-08 20:58:50

awkLinux編寫腳本

2016-07-29 15:13:00

awk文本處理工具編程

2010-05-11 12:17:51

Unix awk

2016-08-10 11:19:11

awkLinux開源

2019-12-03 10:00:19

awkLinux循環(huán)

2009-09-04 10:42:56

C#流程控制語句

2010-07-19 10:11:58

Perl流程控制語句

2024-11-01 16:05:26

2024-09-11 17:00:36

2024-11-05 12:59:42

while 循環(huán)迭代字節(jié)碼

2011-08-24 16:36:00

T-SQL

2015-07-23 15:17:37

JavaScript循環(huán)語句

2022-03-20 10:40:11

Linuxawk 腳本

2019-12-12 18:00:54

awkLinux開源

2017-05-31 17:09:52

LinuxShell命令

2010-05-11 10:29:06

Unix awk

2024-06-06 09:09:41

SQL循環(huán)控制命令
點贊
收藏

51CTO技術(shù)棧公眾號