awk正則表達(dá)式及內(nèi)置函數(shù)實(shí)例詳解:
1、模糊匹配:
復(fù)制代碼 代碼如下:
awk ‘{if($3~/97/) print $0}' data.f:如果第三項(xiàng)中含有”97”則打印該行
awk ‘{if($4!~/ufcx/) print $0}' data.f:如果第三項(xiàng)中不含ufcx有則打印
2、精確匹配:
復(fù)制代碼 代碼如下:
awk ‘{if($5==66) print $0}' data.f:如果第五項(xiàng)是66則打印
awk ‘{if($5!=66)print $0}' data.f : 如果第五項(xiàng)不是66則打印
awk ‘{if($1>$5) print $0}' data.f:如果第一項(xiàng)大于第五項(xiàng)則打印
3、大小寫(xiě)匹配:
復(fù)制代碼 代碼如下:
awk ‘{if(/[Ss]ept/) print $0}' data.f:符合,則打印一行。
awk ‘/[Ss]ept/ {print $2}' data.f:符合,則打印第二字段
4、任意匹配:
復(fù)制代碼 代碼如下:
awk ‘{if($2 ~/^.e/) print $0}' data.f:第二字段中,第二個(gè)字符為e,輸出
awk ‘{if($4 ~/(lps|fcx)/) print $0}' data.f:第四個(gè)字段含有l(wèi)ps或fcx則輸出
5、&&,||:
復(fù)制代碼 代碼如下:
awk ‘{if($3 ~/1993/ && $2==”sept”) print $0}' data.f:兩邊都真則輸出
awk ‘{if($3 ~/a9/ || $2==”sept”) print $0}' data.f:一邊為真則輸出
6、變量定義:
awk ‘{date=$2;price=$5; if(date ~/[Ss]ept/) print “price is ” price}' data.f:變量定義,滿足date是sept或者Sept的將price輸出。
7、修改數(shù)值(源文件數(shù)值不變)
復(fù)制代碼 代碼如下:
awk ‘{BASELINE=42; if($1>BASELINE) $5=$5+100; print $0}' data.f:三行程序,以“;”分割
如果修改的是文本域,就要添加“”””。例如:awk ‘{if($2==”may”) $2=”tt”; print $0}' data.f上邊都是顯示所有數(shù)據(jù),awk ‘{if($2==”may”) {$2=”tt”; print $0}}' data.f這個(gè)只顯示修改數(shù)據(jù),仔細(xì)看看,其實(shí)語(yǔ)法和c一樣,只是最外邊添加了一個(gè){}符號(hào)。
8、創(chuàng)建新域:(源文件數(shù)值不變)
復(fù)制代碼 代碼如下:
awk ‘{if($5>$1){$8=$5-$1;print $1,$8}}' data.f:
或者awk ‘{if($5>$1){diff=$5-$1;print $1,diff}}' data.f9、數(shù)據(jù)統(tǒng)計(jì):
awk ‘{(total+=$5)}END{print total}' data.f:“{(total+=$5)}”和“{print total}”代表兩個(gè)不同的代碼段,如果沒(méi)有END每次的累積結(jié)果都會(huì)輸出,END可以理解為代碼段落的標(biāo)志,這樣只輸出最終結(jié)果即{print total}只執(zhí)行一次。
10、統(tǒng)計(jì)文件大?。?/strong>
復(fù)制代碼 代碼如下: