您好,登錄后才能下訂單哦!
這篇文章給大家介紹如何正確的使用awk正則表達(dá)式,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。
1、模糊匹配:
awk ‘{if($3~/97/) print $0}' data.f:如果第三項(xiàng)中含有”97”則打印該行 awk ‘{if($4!~/ufcx/) print $0}' data.f:如果第三項(xiàng)中不含ufcx有則打印
2、精確匹配:
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ě)匹配:
awk ‘{if(/[Ss]ept/) print $0}' data.f:符合,則打印一行。 awk ‘/[Ss]ept/ {print $2}' data.f:符合,則打印第二字段
4、任意匹配:
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、&&,||:
代碼如下:
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:變量定義,滿(mǎn)足date是sept或者Sept的將price輸出。
7、修改數(shù)值(源文件數(shù)值不變)
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ù)值不變)
awk ‘{if($5>$1){$8=$5-$1;print $1,$8}}' data.f: 或者awk ‘{if($5>$1){diff=$5-$1;print $1,diff}}' data.f
9、數(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>
代碼如下:
ls –l | awk ‘{if(/^[^d]/) total=+$5}END{print “total KB:” total}':/^[^d]/行首匹配可以不寫(xiě)域值$1
11、Awk內(nèi)置變量:
ARGC 命令行參數(shù)個(gè)數(shù)
ARGV 命令行參數(shù)排列
ENVIRON 支持隊(duì)列中系統(tǒng)環(huán)境變量的使用
FILENAME awk瀏覽的文件名
FNR 瀏覽文件的記錄數(shù)
FS 設(shè)置輸入域分隔符,等價(jià)于命令行- F選項(xiàng)
NF 瀏覽記錄的域個(gè)數(shù)
NR 已讀的記錄數(shù)
OFS 輸出域分隔符
ORS 輸出記錄分隔符
RS 控制記錄分隔符
12、awk內(nèi)置字符串處理函數(shù)
gsub ( r, s )在整個(gè)$0中用s替代r
gsub ( r, s , t )在整個(gè)t中用s替代r
index ( s , t )返回s中字符串t的第一位置
length ( s )返回s長(zhǎng)度
match ( s , r )測(cè)試s是否包含匹配r的字符串,返回位置
split ( s , a , fs )在fs上將s分成序列a
sprint ( f m t , exp )返回經(jīng)f m t格式化后的exp
sub ( r, s ,$0) $0中s替換第一次r出現(xiàn)的位置
substr ( s , p )返回字符串s中從p開(kāi)始的后綴部分
substr ( s , p , n )返回字符串s中從p開(kāi)始長(zhǎng)度為n的后綴部分
13、awk ‘gsub(/6\./,78) {print $0}' data.f:將所有“6.”換成78,并輸出
代碼如下:
awk ‘{if($2==”Sept”) {sub(/3/,”9″,$0); print $0}}' data.f:只替換第一個(gè)出現(xiàn)的
awk ‘BEGIN{print index(“hello”,”lo”)}':輸出的值為4
awk ‘{if($3==”3BC1997″) print length($3) ” ” $3}' data.f
awk ‘BEGIN{print match(“ABCD”,”B”)}':輸出2
awk ‘BEGIN{print match(“ABCD”,/B/)}':“//”和“”””效果一樣
awk ‘BEGIN {print split(“123#234#654″, myarray, “#”)}':返回?cái)?shù)組元素個(gè)數(shù),123#234#654是字符串,以“#”為分隔符,將字符串放入數(shù)組。
awk ‘{if($1==34) print substr($3,2,7)}' data.f
awk ‘BEGIN{print substr(“helloleeboy”,2,7)}':輸出ellole
awk ‘BEGIN{print substr(“helloleeboy”,2,7)}' data.f:輸出n遍ellole,n為data.f的行數(shù)
14、awk ‘BEGIN{print”May\tDay\n\nMay \104\141\171″}':\104\141\171表示Day。\t:tab鍵,\n:換行,\ddd:八進(jìn)制
15、echo “65” | awk ‘{printf “%c\n”,$0}':printf函數(shù),和c差不多,輸出為A。(ASCII碼)
代碼如下:
echo “65” | awk ‘{printf “%d\n”,$0}':輸出65數(shù)字。
awk ‘{printf “%-15s %s\n”,$2,$3}' data.f:“%-15s”左對(duì)齊15個(gè)字符長(zhǎng)度
awk ‘{if(age<$1) print $0}' age=80 data.f和 awk ‘{age=49;if(age<$1) print $0}' data.f結(jié)果一樣,前者將值傳入awk,后者在awk中定義了一個(gè)變量。
關(guān)于如何正確的使用awk正則表達(dá)式就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。