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

2021-09-23 06:25:32 字數 2219 閱讀 1310

從 awk 系列開始直到第 12 部分,我們都是在命令列或者指令碼檔案裡寫一些簡短的 awk 命令和程式。

然而 awk 和 shell 一樣也是乙個解釋型語言。通過從開始到現在的一系列的學習,你現在能寫可以執行的 awk 指令碼了。

和寫 shell 指令碼差不多,awk 指令碼以下面這一行開頭:

#! /path/

to/awk/utility -f 

例如在我的系統上,awk 工具安裝在 /user/bin/awk 目錄,所以我的 awk 指令碼以如下內容作為開頭:

#! /usr/bin/awk -f 

上面一行的解釋如下:

說是這麼說,現在從下面的簡單例子開始,讓我們深入研究一些可執行的 awk 指令碼。使用你最喜歡的編輯器建立乙個新檔案,像下面這樣:

$ vi script.awk 

然後把下面**貼上到檔案中:

#!/usr/bin/awk -f

begin  

儲存檔案後退出,然後執行下面命令,使得指令碼可執行:

$ chmod +x script.awk 

然後,執行它:

$ ./script.awk 

輸出樣例:

writing my 

first

awk executable script! 

乙個嚴格的程式設計師一定會問:「注釋呢?」。是的,你可以在 awk 指令碼中包含注釋。在**中寫注釋是一種良好的程式設計習慣。

它有利於其它程式設計師閱讀你的**,理解程式檔案或者指令碼中每一部分的功能。

所以,你可以像下面這樣在指令碼中增加注釋:

#!/usr/bin/awk -f 

# 這是如何在 awk 中寫注釋的示例 

# 使用特殊模式 begin

來輸出一句話 

begin

接下來我們看乙個讀檔案的例子。我們想從帳號檔案 /etc/passwd 中查詢乙個叫 aaronkilik 的使用者,然後像下面這樣列印使用者名稱、使用者的 id、使用者的 gid (lctt譯註:組 id):

下面是我們指令碼檔案的內容,檔名為 second.awk。

#! /usr/bin/awk -f 

# 使用 begin

指定字元來設定 fs 內建變數 

begin

# 搜尋使用者名稱 aaronkilik 並輸出賬號細節 

/aaronkilik/  

儲存檔案後退出,使得指令碼可執行,然後像下面這樣執行它:

$ chmod +x 

second

.awk$ ./

second

.awk /etc/passwd 

輸出樣例:

username : aaronkilik 

user

id : 1000 

user

gid : 1000 

在下面最後乙個例子中,我們將使用 do while 語句來列印數字 0-10:

下面是我們指令碼檔案的內容,檔名為 do.awk。

#! /usr/bin/awk -f 

#printing from

0-10 using a do while statement 

#do while statement 

begin

while(x<=10) 

} 儲存檔案後,像之前操作一樣使得指令碼可執行。然後,執行它:

$ chmod +x do.awk

$ ./do.awk 

輸出樣例

1 2 

3 4 

5 6 

7 8 

9 10 

總結

我們已經到達這個精彩的 awk 系列的最後,我希望你從整個 13 個章節中學到了很多知識,把這些當作你 awk 程式語言的入門指導。

我一開始就提到過,awk 是乙個完整的文字處理語言,所以你可以學習很多 awk 程式語言的其它方面,例如環境變數、陣列、函式(內建的或者使用者自定義的),等等。

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

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

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

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

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

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