Awk

Awk

文本處理軟件工具
AWK是一個優良的文本處理工具,Linux及Unix環境中現有的功能最強大的數據處理引擎之一。[1]這種編程及數據操作語言(其名稱得自于它的創始人阿爾佛雷德·艾侯、彼得·溫伯格和布萊恩·柯林漢姓氏的首個字母)的最大功能取決于一個人所擁有的知識。
    軟件名稱:Awk 軟件平台:Linux及Unix 軟件語言:英語 開發商: 軟件授權: 軟件版本: 軟件大小: 屬性:處理文本的編程語言工具 創始人:Alfred Aho等

簡介

AWK是一種優良的文本處理工具。它不僅是Linux中也是任何環境中現有的功能最強大的數據處理引擎之一。這種編程及數據操作語言(其名稱得自于它的創始人Alfred Aho、Peter Weinberger和Brian Kernighan姓氏的首個字母)的最大功能取決于一個人所擁有的知識。

AWK提供了極其強大的功能:可以進行樣式裝入、流控制、數學運算符、進程控制語句甚至于内置的變量和函數。它具備了一個完整的語言所應具有的幾乎所有精美特性。實際上AWK的确擁有自己的語言AWK程序設計語言,三位創建者已将它正式定義為“樣式掃描和處理語言”。它允許您創建簡短的程序,這些程序讀取輸入文件、為數據排序、處理數據、對輸入執行計算以及生成報表,還有無數其他的功能。

在最初創造AWK時,其目的是用于文本處理,并且這種語言的基礎是,隻要在輸入數據中有模式匹配,就執行一系列指令。該實用工具掃描文件中的每一行,查找與命令行中所給定内容相匹配的模式。如果發現匹配内容,則進行下一個編程步驟。如果找不到匹配内容,則繼續處理下一行。

調用方式

awk提供了适應多種需要的不同解決方案,它們是:

一、awk命令行,你可以象使用普通UNIX命令一樣使用awk,在命令行中你也可以使用awk程序設計語言,雖然awk支持多行的錄入,但是錄入長長的命令行并保證其正确無誤卻是一件令人頭疼的事,因此,這種方法一般隻用于解決簡單的問題。當然,你也可以在shell script程序中引用awk命令行甚至awk程序腳本。

二、使用-f選項調用awk程序。awk允許将一段awk程序寫入一個文本文件,然後在awk命令行中用-f選項調用并執行這段程序。具體的方法我們将在後面的awk語法中講到。

三、利用命令解釋器調用awk程序:利用UNIX支持的命令解釋器功能,我們可以将一段awk程序寫入文本文件,然後在它的第一行加上:

#!/bin/awk-f

并賦予這個文本文件以執行的權限。這樣做之後,你就可以在命令行中用類似于下面這樣的方式調用并執行這段awk程序了。

awk腳本文本名待處理文件

語法

與其它UNIX命令一樣,awk擁有自己的語法:

其中pattern參數可以是egrep正則表達式中的任何一個,它可以使用語法/re/再加上一些樣式匹配技巧構成。與sed類似,你也可以使用","分開兩樣式以選擇某個範圍。關于匹配的細節,你可以參考附錄,如果仍不懂的話,找本UNIX書學學grep和sed(本人是在學習ed時掌握匹配技術的)。

action參數總是被大括号包圍,它由一系列awk語句組成,各語句之間用";"分隔。awk解釋它們,并在pattern給定的樣式匹配的記錄上執行其操作。與shell類似,你也可以使用“#”作為注釋符,它使“#”到行尾的内容成為注釋,在解釋執行時,它們将被忽略。

你可以省略pattern和action之一,但不能兩者同時省略,當省略pattern時沒有樣式匹配,表示對所有行(記錄)均執行操作,省略action時執行缺省的操作——在标準輸出上顯示。

-fprogfile:允許awk調用并執行progfile指定有程序文件。progfile是一個文本文件,他必須符合awk的語法。

in_file:awk的輸入文件,awk允許對多個輸入文件進行處理。值得注意的是awk不修改輸入文件。如果未指定輸入文件,awk将接受标準輸入,并将結果顯示在标準輸出上。awk支持輸入輸出重定向。

内置變量

前面說過,awk處理的工作與數據庫的處理方式有相同之處,其相同處之一就是awk支持對記錄和字段的處理,其中對字段的處理是grep和sed不能實現的,這也是awk優于二者的原因之一。在awk中,缺省的情況下總是将文本文件中的一行視為一個記錄,而将一行中的某一部分作為記錄中的一個字段。

為了操作這些不同的字段,awk借用shell的方法,用1,2,3...這樣的方式來順序地表示行(記錄)中的不同字段。特殊地,awk用0表示整個行(記錄)。不同的字段之間是用稱作分隔符的字符分隔開的。系統默認的分隔符是空格。awk允許在命令行中用-Fre的形式來改變這個分隔符。

事實上,awk用一個内置的變量RS來記憶這個分隔符。awk中有好幾個這樣的内置變量,例如,記錄分隔符變量RS、當前工作的記錄數NR等等,本文後面的附表列出了全部的内置變量。這些内置的變量可以在awk程序中引用或修改,例如,你可以利用NR變量在模式匹配中指定工作範圍,也可以通過修改記錄分隔符RS讓一個特殊字符而不是換行符作為記錄的分隔符。

上一篇:TCPDUMP

下一篇:中間件

相關詞條

相關搜索

其它詞條