我們將逐漸揭開 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...