AWK程序結(jié)構(gòu)
一般來說抓谴,我們每一個 awk 程序都是由一個或多個 模式–動作 語句組成的序列:
pattern { action }
pattern { action }
...
awk 的基本操作是在由輸入行組成的序列中, 陸續(xù)地掃描每一行, 搜索可以被模式 匹配 (match) 的行,然后執(zhí)行后面的動作膏潮。
$ awk '$3 == 0 { print $1 }' examp.data
上面的程序是模式與動作的典型例子. 程序
$3 == 0 { print $1 }
因為模式與動作都是可選的, 所以用花括號將動作包圍起來, 以便區(qū)分兩者
內(nèi)建變量
一般來說awk有以下常用內(nèi)建變量:
變量 | 字段代表意義 |
---|---|
0 | 當(dāng)前記錄(這個變量中存放著整個行的內(nèi)容) |
$1~$n | 當(dāng)前記錄的第n個字段毅待,字段間由FS分隔 |
FS | 輸入字段分隔符 默認(rèn)是空格或Tab |
NF | 當(dāng)前記錄中的字段個數(shù)牧抵,就是有多少列 |
NR | 已經(jīng)讀出的記錄數(shù)补疑,就是行號,從1開始歼秽,如果有多個文件話,這個值也是不斷累加中情组。 |
FNR | 當(dāng)前記錄數(shù)燥筷,與NR不同的是,這個值會是各個文件自己的行號 |
RS | 輸入的記錄分隔符院崇, 默認(rèn)為換行符 |
OFS | 輸出字段分隔符肆氓, 默認(rèn)也是空格 |
ORS | 輸出的記錄分隔符,默認(rèn)為換行符 |
FILENAME | 當(dāng)前輸入文件的名字 |
正則表達(dá)式
匹配
為使一域匹配一正則表達(dá)式底瓣,可以使用以下兩種方法:
$n~正則表達(dá)式
if($n~正則表示式) print $0
以谢揪,作為分隔符,第4列含有一個或多個字符a
awk -F ',' '{if($4~/a+/) print $2 "\t\t" $4}' command
打印以root開頭的行
awk -F: '$0 ~ /^root/' /etc/passwd
和上一句等效
awk -F: '{if($0 ~ /^root/) print $0}' /etc/passwd
精確匹配
打印名字為root的用戶在/etc/passwd文件中的記錄
awk -F : '$1=="root" {print $0}' /etc/passwd
打印路徑為/root的用戶在/etc/passwd中的記錄
awk -F : '$6=="/root" {print $0}' /etc/passwd