轉載:http://blog.sina.com.cn/s/blog_3d2d79aa0100h47h.html
awk 是一種編程語言,用於在linux/unix下對文本和數據進行處理。數據可以來自標准輸入、一個或多個文件,或其它命令的輸出(即管道)。它支持用戶自定義函數和 動態正則表達式等先進功能,是linux/unix下的一個強大編程工具。它在命令行中使用,但更多是作為腳本來使用。
awk的處理文本和數據的方式是這 樣的,它逐行掃描文件,從第一行到最后一行,尋找匹配的特定模式的行,並在這些行上進行你想要的操作。如果沒有指定處理動作,則把匹配的行顯示到標准輸出 (屏幕),即默認處理動作是print;如果沒有指定模式,則所有被操作所指定的行都被處理,即默認指定模式是全部。awk分別代表其作者姓氏的第一個字母。因為它的作者是三個人,分別是Alfred Aho、Brian Kernighan、Peter Weinberger。gawk是awk的GNU版本,它提供了Bell實驗室和GNU的一些擴展。
像shell一樣,awk也有好幾種,常見的如awk、nawk、mawk、gawk,其中
awk:最初在1 9 7 7年完成,1 9 8 5年發表了一個新版本的awk,它的功能比舊版本增強了不少,awk 能夠用很短的程序對文檔里的資料做修改、比較、提取、打印等處理,如果使用C 或P a s c a l 等語言編寫程序完成上述的任務會十分不方便而且很花費時間,所寫的程序也會很大;
nawk: 在 20 世紀 80 年代中期,對 awk語言進行了更新,並不同程度地使用一種稱為 nawk(new awk) 的增強版本對其進行了替換。許多系統中仍然存在着舊的awk 解釋器,但通常將其安裝為 oawk (old awk) 命令,而 nawk 解釋器則安裝為主要的 awk 命令,也可以使用 nawk 命令。Dr. Kernighan 仍然在對 nawk 進行維護,與 gawk 一樣,它也是開放源代碼的,並且可以免費獲得;
mawk:mawk 是 awk 編程語言的解釋器。awk語言在多媒體數據文件以及文本的檢索和處理,算法的原型設計和試驗都有廣泛的使用。mawk帶給awk新的概念,它實現了在 《The AWK Programming Language》(Aho, Kernighan and Weinberger, The AWK Programming Language, Addison-Wesley Publishing, 1988.被認為是 AWK 手冊。)中定義的 awk語言。mawk遵循 POSIX 1003.2 (草案 11.3)定義的 AWK 語言,包含了一些沒有在AWK 手冊中提到的特色,同時 mawk 提供一小部分擴展,另外據說mawk是實現最快的awk;
gawk: 是 GNU Project 的awk解釋器的開放源代碼實現。盡管早期的 GAWK 發行版是舊的 AWK 的替代程序,但不斷地對其進行了更新,以包含 NAWK 的特性;
目前,大家都比較傾向於使用awk和gawk,本文中要介紹的awk是以GUN的gawk為例的。Ubuntu系統中的各種awk的選項設置,可以通過sudo update-alternatives --config awk來完成,實際上你通過手動修改軟鏈接也能實現。Debian最小化安裝的時候awk的鏈接是指向mawk的。