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

2021-07-22 18:58:34 字數 2923 閱讀 6725

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

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

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

1. if-else 語句

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

if  (條件 1) 

else 

在上述語法中,條件 1 和條件 2 是 awk 表示式,而動作 1 和動作 2 是當各自的條件得到滿足時所執行的 awk 命令。

當條件 1 滿足時,意味著它為真,那麼動作 1 被執行並退出 if 語句,否則動作 2 被執行。

if 語句還能擴充套件為如下的 if-else_if-else 語句:

if (條件 1)

else if (條件 2)

else

對於上面的形式,如果條件 1 為真,那麼動作 1 被執行並退出 if 語句,否則條件 2 被求值且如果值為真,那麼動作 2 被執行並退出 if 語句。然而,當條件 2 為假時,那麼動作 3 被執行並退出 if 語句。

這是在使用 if 語句的乙個例項,我們有乙個使用者和他們年齡的列表,儲存在檔案 users.txt 中。

我們要列印乙個清單,顯示使用者的名稱和使用者的年齡是否小於或超過 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 ' 

else 

}'    ~/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

2. for 語句如果你想在乙個迴圈中執行一些 awk 命令,那麼 for 語句為你提供乙個做這個的合適方式,格式如下:

for ( 計數器的初始化 ; 測試條件 ; 計數器增加 )
這裡,該方法是通過乙個計數器來控制迴圈執行來定義的,首先你需要初始化這個計數器,然後針對測試條件執行它,如果它為真,執行這些動作並最終增加這個計數器。當計數器不滿足條件時,迴圈終止。

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

$ awk 'begin }'
輸出樣例

0 	12

3456

78910

3. while 語句while 語句的傳統語法如下:

while ( 條件 )
這個條件是乙個 awk 表示式而動作是當條件為真時被執行的 awk 命令。

下面是乙個說明使用 while 語句來列印數字 0 到 10 的指令碼:

#!/bin/bash

awk ' begin

}'

儲存檔案並使指令碼可執行,然後執行它:

$ chmod +x test.sh

$ ./test.sh

輸出樣例

0 	12

3456

78910

4. do while 語句它是上文中 while 語句的乙個變型,具有以下語法:

do 

while (條件)

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

#!/bin/bash

awk ' begin

while (counter<=10)

}'

修改指令碼之後,儲存檔案並退出。按如下方式使指令碼可執行並執行它:

$ chmod +x test.sh

$ ./test.sh

輸出樣例

0 	12

3456

78910

5.總結這不是關於 awk 的流程控制語句的乙個全面的指南,正如我早先提到的,在 awk 裡還有其他幾個流程控制語句。

儘管如此,awk 系列的這一部分使應該你明白了乙個明確的基於某些條件控制的 awk 命令是如何執行的基本概念。

免費提供最新

linux

awk 系列 如何使用 awk 內建變數

我們將逐漸揭開 awk 功能的神秘面紗,在本節中,我們將介紹 awk 內建built in變數的概念。你可以在 awk 中使用兩種型別的變數,它們是 使用者自定義user defined變數 我們在第八節中已經介紹了 和內建變數。awk 內建變數示例 awk 內建變數已經有預先定義的值了,但我們也可...

awk系列 如何使用awk語言編寫指令碼

從 awk 系列開始直到第 12 部分,我們都是在命令列或者指令碼檔案裡寫一些簡短的 awk 命令和程式。然而 awk 和 shell 一樣也是乙個解釋型語言。通過從開始到現在的一系列的學習,你現在能寫可以執行的 awk 指令碼了。和寫 shell 指令碼差不多,awk 指令碼以下面這一行開頭 pa...

awk 系列 如何使用 awk 比較操作符

對於 使用 awk 命令的使用者來說,處理一行文字中的數字或者字串時,使用比較運算子來過濾文字和字串是十分方便的。在 awk 系列的此部分中,我們將 一下如何使用比較運算子來過濾文字或者字串。如果你是程式設計師,那麼你應該已經熟悉了比較運算子 對於其它人,下面的部分將介紹比較運算子。awk 中的比較...