<jims.yang@gmail.com>
Copyright ? 2004 本文遵從GPL協議,歡迎轉載、修改、散布。
第一次發布時間:2004年8月6日
Table of Contents
awk是一種編程語言,用于在linux/unix下對文本和數據進行處理。數據可以來自標準輸入、一個或多個文件,或其它命令的輸出。它支持用戶自定義函數和動態正則表達式等先進功能,是linux/unix下的一個強大編程工具。它在命令行中使用,但更多是作為腳本來使用。awk的處理文本和數據的方式是這樣的,它逐行掃描文件,從第一行到最后一行,尋找匹配的特定模式的行,并在這些行上進行你想要的操作。如果沒有指定處理動作,則把匹配的行顯示到標準輸出(屏幕),如果沒有指定模式,則所有被操作所指定的行都被處理。awk分別代表其作者姓氏的第一個字母。因為它的作者是三個人,分別是Alfred Aho、Brian Kernighan、Peter Weinberger。gawk是awk的GNU版本,它提供了Bell實驗室和GNU的一些擴展。下面介紹的awk是以GUN的gawk為例的,在linux系統中已把awk鏈接到gawk,所以下面全部以awk進行介紹。
awk [options] 'script' var=value file(s)
awk [options] -f scriptfile var=value file(s)
指定輸入文件折分隔符,fs是一個字符串或者是一個正則表達式,如-F:。
賦值一個用戶定義變量。
從腳本文件中讀取awk命令。
對nnn值設置內在限制,-mf選項限制分配給nnn的最大塊數目;-mr選項限制記錄的最大數目。這兩個功能是Bell實驗室版awk的擴展功能,在標準awk中不適用。
在兼容模式下運行awk。所以gawk的行為和標準的awk完全一樣,所有的awk擴展都被忽略。
打印簡短的版權信息。
打印全部awk選項和每個選項的簡短說明。
打印不能向傳統unix平臺移植的結構的警告。
打印關于不能向傳統unix平臺移植的結構的警告。
打開兼容模式。但有以下限制,不識別:x、函數關鍵字、func、換碼序列以及當fs是一個空格時,將新行作為一個域分隔符;操作符**和**=不能代替^和^=;fflush無效。
允許間隔正則表達式的使用,參考(grep中的Posix字符類),如括號表達式[[:alpha:]]。
使用program-text作為源代碼,可與-f命令混用。
打印bug報告信息的版本。
pattern {action} 如$ awk '/root/' test,或$ awk '$3 < 100' test。
兩者是可選的,如果沒有模式,則action應用到全部記錄,如果沒有action,則輸出匹配全部記錄。默認情況下,每一個輸入行都是一條記錄,但用戶可通過RS變量指定不同的分隔符進行分隔。
模式可以是以下任意一個:
/正則表達式/:使用通配符的擴展集。
關系表達式:可以用下面運算符表中的關系運算符進行操作,可以是字符串或數字的比較,如$2>%1選擇第二個字段比第一個字段長的行。
模式匹配表達式:用運算符~(匹配)和~!(不匹配)。
模式,模式:指定一個行的范圍。該語法不能包括BEGIN和END模式。
BEGIN:讓用戶指定在第一條輸入記錄被處理之前所發生的動作,通常可在這里設置全局變量。
END:讓用戶在最后一條輸入記錄被讀取之后發生的動作。
操作由一人或多個命令、函數、表達式組成,之間由換行符或分號隔開,并位于大括號內。主要有四部份:
變量或數組賦值
輸出命令
內置函數
控制流命令
Table 1. awk的環境變量
| 變量 | 描述 |
|---|---|
| $n | 當前記錄的第n個字段,字段間由FS分隔。 |
| $0 | 完整的輸入記錄。 |
| ARGC | 命令行參數的數目。 |
| ARGIND | 命令行中當前文件的位置(從0開始算)。 |
| ARGV | 包含命令行參數的數組。 |
| CONVFMT | 數字轉換格式(默認值為%.6g) |
| ENVIRON | 環境變量關聯數組。 |
| ERRNO | 最后一個系統錯誤的描述。 |
| FIELDWIDTHS | 字段寬度列表(用空格鍵分隔)。 |
| FILENAME | 當前文件名。 |
| FNR | 同NR,但相對于當前文件。 |
| FS | 字段分隔符(默認是任何空格)。 |
| IGNORECASE | 如果為真,則進行忽略大小寫的匹配。 |
| NF | 當前記錄中的字段數。 |
| NR | 當前記錄數。 |
| OFMT | 數字的輸出格式(默認值是%.6g)。 |
| OFS | 輸出字段分隔符(默認值是一個空格)。 |
| ORS | 輸出記錄分隔符(默認值是一個換行符)。 |
| RLENGTH | 由match函數所匹配的字符串的長度。 |
| RS | 記錄分隔符(默認是一個換行符)。 |
| RSTART | 由match函數所匹配的字符串的第一個位置。 |
| SUBSEP | 數組下標分隔符(默認值是 主站蜘蛛池模板: 登封市| 昭苏县| 宁强县| 连云港市| 安国市| 剑川县| 二连浩特市| 新沂市| 玉树县| 珲春市| 水富县| 巴林左旗| 华阴市| 疏附县| 汽车| 墨玉县| 闻喜县| 台北县| 若尔盖县| 玛曲县| 洞口县| 交城县| 壤塘县| 龙山县| 富裕县| 大竹县| 道孚县| 高州市| 汽车| 德江县| 延安市| 碌曲县| 嵩明县| 抚州市| 定远县| 崇左市| 福海县| 沭阳县| 佛教| 庆城县| 德惠市| |