重要概念
記錄(Records):記錄默認以換行符爲分割符,可以設置RS變量來更改分隔符,RS可以是單個字符也可以是字符串,當RS爲空時,以空行分割。
域(Fields):每當一個記錄被讀取,awk使用FS變量作爲分隔符將記錄分割成域。FS可以是單個字符也可以是字符串,當FS爲空時,每個字符爲一個域。每個域的值可以通過它的位置$1、$2...引用,$0表示整個記錄。
輸出命令:print用於輸出文本。其輸出的文本總是以"輸出記錄分隔符"分割的,默認值爲空格符。例如:print $1, $3顯示當前記錄的第1和第3個域,並以預定義的“輸出域分隔符”分隔,其默認值爲一個空格符。printf等同於C的格式化輸出。
模式和動作:awk腳本是由模式和動作組成“pattern {action}” 兩者皆是可選的,如果沒有pattern,則action應用到全部記錄。如果沒有action,則輸出所有匹配的記錄。 例如:awk '/apple/{print $0}',pattern爲匹配包含apple的記錄,action爲打印該記錄。
內建變量
NR: 已輸入記錄的條數。(The total number of input records seen so far.)
NF: 當前記錄中域的個數。(The number of fields in the current input record.)
FILENAME: 當前輸入文件的文件名。
FS: 域分隔符。(input field separator)
RS: 記錄分隔符。(input record separator)
OFS: 輸出域分隔符。(output recode separator)
ORS: 輸出記錄分隔符。(output field separator)
OFMT: 輸出數字格式(format for numeric output),其默認值爲"%.6g。
模式和動作
模式可以是以下任意一個:
模式 |
描述 |
/正則表達式/ |
使用正則表達式匹配行,例如:awk '/apple/{print $0;}' |
關係表達式 |
使用關係運算符對字符串和數字進行比較操作, 例如:awk '$1>100 {print $1;}' |
模式匹配表達式 |
運算符 ~、~! 分別表示匹配、不匹配, 例如:awk '$1 ~ /apple/ {print $1;}' |
pattern1,pattern2 |
指定匹配行的範圍,pattern 不能是 BEGIN、END 模式, 例如: awk '/apple/,/banana/{print $0;}' filename |
BEGIN |
第一條輸入記錄被處理之前所發生的動作, 例如:awk 'BEGIN{FS=":";}{print $1,$2;}' |
END |
最後一條輸入記錄被讀取之後發生的動作, 例如: awk '{print $0;}END{print "total line number:",NR;}'
|
動作由一個或多個命令、函數、表達式組成,之間由換行符或分號隔開,並位於大括號內。可以爲以下任意一個:
動作 |
描述 |
變量賦值語句 |
包括數組賦值,例如:awk 'BEGIN{total=0}{print $1;total+=$1;}END{print total;}' |
輸出語句 |
print、printf 語句 |
流程控制結構語句 |
if、for、while、do 結構 |
函數語句 |
包括內置函數 |
內置函數
內置函數太多,用的時候查找就行,下面附上內置函數的手冊地址:
http://www.gnu.org/software/gawk/manual/gawk.html#Built_002din
AWK常用命令
Awk常用的單行命令,詳見:
http://blog.csdn.net/xinhanggebuguake/article/details/8461002
參考:http://blog.sina.com.cn/s/blog_87edb13801015dko.html