AWK基本示例

本教程將介紹一些有用的AWK例子以及命令。考慮我們有一個文本檔marks.txt將要被處理,它有以下內容:

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

列印的列或字段

我們可以指示AWK從輸入字段只列印某些列。下麵簡單的例子說明了這一點:

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

在執行上面的代碼後,得到以下結果:

Physics    80
Maths      90
Biology    87
English    85
History    89

在我們的marks.txt檔中第3列包含科目名和第四列包含特定科目標記。這裏使用AWK的printf命令列印這兩列。在上面的例子中$3 和 $4 表示從輸入記錄在第三和第四個字段。

列印所有行

默認情況下AWK列印所有匹配模式行。

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

在執行上面的代碼後,得到以下結果:

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

在上面的例子中,我們正在尋找形式模式a,當模式匹配從所述主體塊通過執行命令。在沒有主體塊- 默認採取動作是列印記錄。因此,下麵的命令也產生相同的結果:

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

通過模式列印列

我們已經看到,當模式匹配成功在默認情況下AWK列印全部記錄。但是,我們可以指示AWK只列印某些字段。比如下麵的例子列印第三和第四字段,當模式匹配成功。

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

在執行上面的代碼後,得到以下結果:

Maths      90
Biology    87
English    85
History    89

按任何順序列印列

可以以任何順序列印列?是的!當然,我們可以做到這一點。比如下麵的例子列印第4列後是第3列。

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

在執行上面的代碼後,得到以下結果:

90    Maths
87    Biology
85    English
89    History

計算並列印匹配模式

讓我們試著一個有趣的例子,我們將計算並列印行的數量,模式匹配成功的數量。

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

在執行上面的代碼後,得到以下結果:

Count = 4

在上面的例子中,我們增加計數器的值在模式匹配成功時,列印END塊這個值。請注意,不像其他的編程語言,這裏不需要聲明變數就可以直接使用它。

列印超過18個字元的行

僅列印那些含有多於18個字元的行。

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

在執行上面的代碼後,得到以下結果:

3)    Shyam    Biology    87
4)    Kedar    English    85

AWK提供了內置的長度函數返回字串的長度。$0 變數存儲整行,並在沒有主體塊默認採取動作即列印操作。因此,如果一行超過18個字元,比較結果為true那麼這一行將被列印出來。


上一篇: AWK基本語法 下一篇: AWK內置變數