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那麼這一行將被打印出來。