歡迎您光臨本站 註冊首頁

gawk詳解(二)

←手機掃碼閱讀     火星人 @ 2014-03-09 , reply:0

1)改變欄位分隔符
gawk中,預設的欄位分隔符一般是空格符或TAB.也可以在命令行使用-F選項改變字元分隔符,只需在-F後面跟著你想用的分隔符即可.
例如:gawk -F";"'/root/ {print}' /etc/passwd
2)簡單的正則表達式
gawk語言在格式匹配時符合正則表達式.
^ 表示欄位的開始.
例如:$3 ~ /^b/ 如果第三個欄位以字元b開始,則匹配.
$ 表示欄位的結束.例如:$3 ~ /b$/ 如果第三個欄位以字元b結束,則匹配.
. 表示和任何單字元m匹配.例如:$3 ~ /i.m/ 如果第三個欄位有字元i,則匹配.
| 表示“或”.例如:/cat | CAT/ 和cat 或CAT字元匹配.
* 表示字元的零到多次重複.例如:/UNI*X/ 和U N X、U N I X、U N I I X、U N I I I X等匹配.
表示字元的一次到多次重複.例如:/UNI X/ 和U N I X、U N I I X等匹配.
\{a,b\} 表示字元a次到b次之間的重複.例如:/ U N I \ { 1,3 \ } X 和U N I X、U N I I X和U N I I I X匹配(其中的“\”為轉義標記).
? 表示字元零次和一次的重複.例如:/UNI?X/ 和UNX 和UNIX匹配.
[] 表示字元的範圍.例如:/I[BDG]M/ 和IBM、IDM和IGM匹配.
[^] 表示不在[]中的字元.例如:/I[^DE]M/ 和所有的以I開始、M結束的包括三個字元的字元串匹配,除了IDM和IEM之外.
3)BEGIN和END
BEGIN模式用來指明gawk開始處理一個文件之前執行一些動作.BEGIN經常用來初始化數值,設置參數等.
END模式用來在文件處理完成後執行一些指令,一般用作總結或註釋.
BEGIN和END中所有要執行的指令都應該用花括弧括起來.BEGIN和END必須使用大寫.
例如:
BEGIN { print "Starting the process the file" }


$1 == "UNIX" {print}
$2 > 10 {printf "This line has a value of %d",$2 }
END { print "Finished processing the file. Bye!"}
4)變數
在gawk中,可以用等號"="給一個變數賦值,變數不用事先聲明.
變數可以和欄位和數值一起使用.
變數也可以作為格式的一部分使用.
內置變數
gawk中有幾個十分有用的內置變數:
NR 已經讀取過的記錄數.
FNR 從當前文件中讀出的記錄數.
FILENAME輸入文件的名字.
FS 欄位分隔符(預設為空格).
RS 記錄分隔符(預設為換行).
OFMT 數字的輸出格式(預設為%g).
OFS 輸出欄位分隔符.
ORS 輸出記錄分隔符.
NF 當前記錄中的欄位數.
5)控制結構
if表達式:
if 表達式的語法:
if (expression){ 動作的每一部分用逗號隔開.
commands
}
else{
commands
}
while循環
while 循環的語法:
while (expression){
commands
}
for循環
for 循環的語法如下:
for (initialization; expression; increment) {
commands
}
next和exit
next指令用來告訴gawk處理文件中的下一個記錄,而不管現在正在做什麼,類似於C中的continue.
gawk運行到exit指令后,就轉到程序的末尾去執行END,如果有END的話.
6)數組
gawk語言支持數組結構.數組不必事先初始化.聲明一個數組的方法如下:
arrayname[num] = value
請看下面的例子:
#將文件中的行逆向輸出
{line[NR] = $0 } # remember each line
END {var=NR # output lines in reverse order
while (var > 0){
print line[var]


var--
}
}
7)自定義函數
複雜的gawk程序常常可以使用自己定義的函數來簡化.
調用用戶自定義函數與調用內部函數的方法一樣.
函數的定義可以放在gawk 程序的任何地方.
用戶自定義函數的格式:
function name (parameter-list) {
body-of-function
}

注意:awk只能處理文本文件,如果不是文件的話,可以通過管道或是其他重定向方式將數據遞交給awk.
print動作的每一部分用逗號隔開.


[火星人 ] gawk詳解(二)已經有311次圍觀

http://coctec.com/docs/linux/show-post-50543.html