在這篇文章中,我們將看到許多小的,甚至沒有什麼意義的例子,但他們能夠驗證awk程序腳本的主要特點。
當awk讀入一行時,它試圖匹配腳本中的每個模式匹配規則。只有與一個特定的模式相匹配的輸入行才能成為操作對象。如果沒有指定操作,與模式相匹配的輸入行將被打印出來(執行打印語句是一個默認操作)。參閱下面的腳本:
/^$/ { print "This is a blank line." }
該腳本表示:如果輸入行為空,那麼打印"This is a blank line" 。這裡的模式為一個正則表達式,用來表示一個空行。這個處理和我們以前所見到的一樣,只包含一條print語句。
如果我們將這個腳本放在一個稱為awkscr的文件中,並使用名為test的輸入文件,這個文件中包含3個空行,然後使下面的命令執行這個腳本:
$ awk -f awkscr test
This is a blank line.
This is a blank line.
This is a blank line.
(從這裡開始,我們將假定腳本放在一個單獨的文件中,並使用-f命令行選項來調用。)這個結果告訴我們在test中有3個空行,腳本忽咯了非空的行。
給以上的腳本加入幾個新的規則。現在的腳本要對輸入進行分析,並將他們歸類為整數、字符串或空行。
/[0-9]+/ { print "That is an integer" }
/[A-Za-z]+/ { print "This is a string" }
/^$/ { print "This is a blank line." }
總的思想是,如果一個輸入行能夠和任何一個模式匹配,那麼就執行相關的print語句。元字符+是正則表達式元字符拓展集中的一部分,它表示"一個或更多"。因此,包含一個或多個數字序列的行將被看作是一個整數。以下是一個使用標准輸入的運行示例:
$ awk -f awkscr
4
That is an integer
t
This is a string
4T
That is an integer
This is a string
RETURN
This is a blank line.
44
That is an integer
CTRL-D
$
注意,輸入"4T"被標識為既是整數又是字符串。一行可以匹配一條或多條規則。你可以編寫一個更嚴格的規則以防止一行與多條規則相匹配。也可以編寫操作來跳過腳本中的其他部分。
--------------------------------------分割線 --------------------------------------
AWK簡介及使用實例 http://www.linuxidc.com/Linux/2013-12/93519.htm
AWK 簡介和例子 http://www.linuxidc.com/Linux/2012-12/75441.htm
Shell腳本之AWK文本編輯器語法 http://www.linuxidc.com/Linux/2013-11/92787.htm
正則表達式中AWK的學習和使用 http://www.linuxidc.com/Linux/2013-10/91892.htm
文本數據處理之AWK 圖解 http://www.linuxidc.com/Linux/2013-09/89589.htm
如何在Linux中使用awk命令 http://www.linuxidc.com/Linux/2014-10/107542.htm
文本分析工具-awk http://www.linuxidc.com/Linux/2014-12/110939.htm
--------------------------------------分割線 --------------------------------------