鍍金池/ 教程/ Linux/ AWK基本示例
AWK環(huán)境安裝配置
AWK格式化打印
Awk教程
AWK控制流
AWK循環(huán)
AWK用戶自定義函數(shù)
AWK工作流程
AWK數(shù)組
AWK基本語(yǔ)法
AWK基本示例
AWK運(yùn)算符
AWK內(nèi)置函數(shù)
AWK內(nèi)置變量
AWK輸出重定向
AWK正則表達(dá)式

AWK基本示例

本教程將介紹一些有用的AWK例子以及命令??紤]我們有一個(gè)文本文件marks.txt將要被處理,它有以下內(nèi)容:

1)    Amit     Physics    80
2)    Rahul    Maths      90
3)    Shyam    Biology    87
4)    Kedar    English    85
5)    Hari     History    89

打印的列或字段

我們可以指示AWK從輸入字段只打印某些列。下面簡(jiǎn)單的例子說(shuō)明了這一點(diǎn):

[jerry]$ awk '{print $3 "\t" $4}' marks.txt

在執(zhí)行上面的代碼后,得到以下結(jié)果:

Physics    80
Maths      90
Biology    87
English    85
History    89

在我們的marks.txt文件中第3列包含科目名和第四列包含特定科目標(biāo)記。這里使用AWK的printf命令打印這兩列。在上面的例子中$3 和 $4 表示從輸入記錄在第三和第四個(gè)字段。

打印所有行

默認(rèn)情況下AWK打印所有匹配模式行。

[jerry]$ awk '/a/ {print $0}' marks.txt

在執(zhí)行上面的代碼后,得到以下結(jié)果:

2)    Rahul    Maths      90
3)    Shyam    Biology    87
4)    Kedar    English    85
5)    Hari     History    89

在上面的例子中,我們正在尋找形式模式a,當(dāng)模式匹配從所述主體塊通過(guò)執(zhí)行命令。在沒(méi)有主體塊- 默認(rèn)采取動(dòng)作是打印記錄。因此,下面的命令也產(chǎn)生相同的結(jié)果:

[jerry]$ awk '/a/' marks.txt

通過(guò)模式打印列

我們已經(jīng)看到,當(dāng)模式匹配成功在默認(rèn)情況下AWK打印全部記錄。但是,我們可以指示AWK只打印某些字段。比如下面的例子打印第三和第四字段,當(dāng)模式匹配成功。

[jerry]$ awk '/a/ {print $3 "\t" $4}' marks.txt

在執(zhí)行上面的代碼后,得到以下結(jié)果:

Maths      90
Biology    87
English    85
History    89

按任何順序打印列

可以以任何順序打印列?是的!當(dāng)然,我們可以做到這一點(diǎn)。比如下面的例子打印第4列后是第3列。

[jerry]$ awk '/a/ {print $4 "\t" $3}' marks.txt

在執(zhí)行上面的代碼后,得到以下結(jié)果:

90    Maths
87    Biology
85    English
89    History

計(jì)算并打印匹配模式

讓我們?cè)囍粋€(gè)有趣的例子,我們將計(jì)算并打印行的數(shù)量,模式匹配成功的數(shù)量。

[jerry]$ awk '/a/{++cnt} END {print "Count = ", cnt}' marks.txt

在執(zhí)行上面的代碼后,得到以下結(jié)果:

Count = 4

在上面的例子中,我們?cè)黾佑?jì)數(shù)器的值在模式匹配成功時(shí),打印END塊這個(gè)值。請(qǐng)注意,不像其他的編程語(yǔ)言,這里不需要聲明變量就可以直接使用它。

打印超過(guò)18個(gè)字符的行

僅打印那些含有多于18個(gè)字符的行。

[jerry]$ awk 'length($0) > 18' marks.txt

在執(zhí)行上面的代碼后,得到以下結(jié)果:

3)    Shyam    Biology    87
4)    Kedar    English    85

AWK提供了內(nèi)置的長(zhǎng)度函數(shù)返回字符串的長(zhǎng)度。$0 變量存儲(chǔ)整行,并在沒(méi)有主體塊默認(rèn)采取動(dòng)作即打印操作。因此,如果一行超過(guò)18個(gè)字符,比較結(jié)果為true那么這一行將被打印出來(lái)。


上一篇:Awk教程下一篇:AWK控制流