AWK 基本示例

2018-08-12 21:30 更新

基本示例

本章節(jié)中,我們將用幾個(gè)示例來(lái)講解幾個(gè)有用的 AWK 命令。 假設(shè)我們經(jīng)有一個(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 命令僅輸出輸入文件中某些特定的列的內(nèi)容。示例如下:

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

執(zhí)行上面的命令可以得到如下結(jié)果:

Physics    80
Maths      90
Biology    87
English    85
History    89

在 marks.txt 文件中,第三列包含課程名字,第四列包含在該課程的得分。我們使用 AWK 輸出命令只輸出了這兩列的內(nèi)容。上面例子中,$3與$4代表輸入記錄中的第三列與第四列的內(nèi)容。

輸出所有行

默認(rèn)情況下,如果某行與模式串匹配,AWK 會(huì)將整行輸出:

[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,每次成功匹配后都會(huì)執(zhí)行主體塊中的命令。如果沒(méi)有主體塊——默認(rèn)的動(dòng)作是輸出記錄(行)。因此上面的效果也可以使用下面簡(jiǎn)略方式實(shí)現(xiàn),它們會(huì)得到相同的結(jié)果:

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

通過(guò)匹配模式串輸出列

前面我們已經(jīng)看到了,當(dāng)模式串匹配成功后, AWK 默認(rèn)會(huì)輸出整個(gè)記錄。不過(guò),我們可以讓 AWK 只輸出特定的域(列)的內(nèi)容。 例如,下面的這個(gè)例子中當(dāng)模式串匹配成功后只會(huì)輸出第三列與第四列的內(nèi)容:

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

執(zhí)行上面的命令可以得到如下結(jié)果:

Maths      90
Biology    87
English    85
History    89

以任意順序輸出列

我們能以任意順序輸出各列嗎?當(dāng)然可以! 下面的例子中我們將在第四列后輸出第三列的內(nèi)容:

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

執(zhí)行上面的命令可以得到如下結(jié)果:

90    Maths
87    Biology
85    English
89    History

計(jì)數(shù)匹配次數(shù)并輸出

讓我們嘗試一個(gè)更有意思的例子,在這個(gè)例子中我們會(huì)統(tǒng)計(jì)模式串成功匹配的次數(shù),并將該結(jié)果打印出來(lái):

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

執(zhí)行上面的命令可以得到如下結(jié)果:

Count = 4

上面這個(gè)例子中,每次成功的匹配我們都會(huì)增加計(jì)數(shù)器的值,并在結(jié)束塊中將該計(jì)數(shù)器的值輸出。 請(qǐng)注意,與其它編程語(yǔ)言不一樣的地方在于, AWK 在使用一個(gè)變量前不需要特意地聲明這個(gè)變量。

輸出字符數(shù)多于 18 的行

這個(gè)例子中我們只輸出那些字符數(shù)超過(guò) 18 的記錄:

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

執(zhí)行上面的命令可以得到如下結(jié)果:

3)    Shyam    Biology    87
4)    Kedar    English    85

AWK 提供了內(nèi)置的 length 函數(shù)。該函數(shù)返回字符串的長(zhǎng)度。變量 $0 表示整行,缺失的主體塊會(huì)執(zhí)行默認(rèn)動(dòng)作,例如,打印輸出。 因此,如果一行中字符數(shù)超過(guò) 18, 則比較的結(jié)果為真,該行則被輸出。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)