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

2021-09-23 16:31:34 字數 1898 閱讀 4169

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

awk 內建變數示例

awk 內建變數已經有預先定義的值了,但我們也可以謹慎地修改這些值,awk 內建變數包括:

讓我們繼續演示一些使用上述 awk 內建變數的方法:

想要讀取當前輸入檔案的名稱,你可以使用filename內建變數,如下:

$ awk 

' '

~/domains

.txt

awk filename 變數

你會看到,每一行都會對應輸出一次檔名,那是你使用filename內建變數時 awk 預設的行為。

我們可以使用nr來統計乙個輸入檔案的行數(記錄),謹記,它也會計算空行,正如我們將要在下面的例子中看到的那樣。

當我們使用 cat 命令檢視檔案 domains.txt 時,會發現它有 14 行文字和 2 個空行:

$ 

cat~/

domains

.txt

輸出檔案內容

$ awk 

' end '

~/domains

.txt

awk 統計行數

想要統計一條記錄或一行中的字段數,我們可以像下面那樣使用 nr 內建變數:

$ 

cat~/

names

.txt

列出檔案內容

$ awk 

''~/

names

.txt

awk 統計檔案中的字段數

接下來,你也可以使用 fs 內建變數指定乙個輸入檔案分隔符,它會定義 awk 如何將輸入行劃分成欄位。

fs 預設值為「空格」和「製表符」,但我們也能將 fs 值修改為任何字元來讓 awk 根據情況切分輸入行。

有兩種方法可以達到目的:

來看 linux 系統上的/etc/passwd檔案,該檔案中的各字段是使用:分隔的,因此,當我們想要過濾出某些欄位時,可以將:指定為新的輸入字段分隔符,示例如下:

我們可以使用-f選項,如下:

$ awk -f

':'''

/etc

/passwd

awk 過濾密碼檔案中的各欄位

此外,我們也可以利用 fs 內建變數,如下:

$ awk 

' begin '

/etc

/passwd

使用 awk 過濾檔案中的各欄位

使用 ofs 內建變數來指定乙個用於輸出的字段分隔符,它會定義如何使用指定的字元分隔輸出字段,示例如下:

$ awk -f

':'' begin '

/etc

/passwd

向檔案中的字段新增分隔符

在本節中,我們已經學習了使用含有預定義值的 awk 內建變數的理念。但我們也能夠修改這些值,雖然並不推薦這樣做,除非你明白自己在做什麼,並且充分理解(這些變數值)。

原文發布時間為:2016-08-08

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

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

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

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

awk內建函式

awk的內建函式split允許把乙個字串分隔為單詞並儲存在陣列中。可以自己定義域分隔符或者使用現在fs 域分隔符 的值。split string,array,field separator split string,array 如果第三個引數沒有提供,awk就預設使用當前fs值。time 12 34...