awk命令行結(jié)構(gòu)和語(yǔ)法結(jié)構(gòu)
awk命令行結(jié)構(gòu)
awk [ -- ] program-text file ...
# program-text即awk命令行中的awk代碼部分,一般使用單引號(hào)包圍
awk -f program-file [ -- ] file ...
# -f program-file表示將awk代碼部分寫(xiě)在文件中,然后使用-f選項(xiàng)去引用這個(gè)文件
awk -e program-text [ -- ] file ...
# -e program-text也用于指定awk代碼,與第一條語(yǔ)法等價(jià),但是當(dāng)既要引用文件,又要使用awk代碼時(shí),必須同時(shí)使用-f和-e
# 即: awk -f file -e 'awk_code' 而不是 awk -f file 'awk_code'
awk語(yǔ)法結(jié)構(gòu)
awk語(yǔ)法結(jié)構(gòu)即awk代碼部分的結(jié)構(gòu)。
awk的語(yǔ)法充斥著pattern{action}
的模式,它們稱(chēng)為awk rule。
# 范例
awk 'BEGIN{n=3} /^[0-9]/$1>5{$1=333;print $1} /Alice/{print "Alice"} END{print "hello"}' a.txt
# 上面示例中,有BEGIN語(yǔ)句塊,有END語(yǔ)句塊,還有2個(gè)main代碼塊,兩個(gè)main代碼塊都使用了正則表達(dá)式作為pattern。
關(guān)于awk的語(yǔ)法:
多個(gè)pattern{action}
可以直接連接連用
action中多個(gè)語(yǔ)句如果寫(xiě)在同一行,則需使用分號(hào)分隔
pattern部分用于篩選行,action表示在篩選通過(guò)后執(zhí)行的操作
pattern和action都可以省略
例如:awk '' a.txt
例如:awk '/Alice/{}' a.txt
例如:awk '/Alice/' a.txt
等價(jià)于awk '/Alice/{print $0}' a.txt
例如:awk '{print $0}' a.txt
省略pattern,等價(jià)于對(duì)每一行數(shù)據(jù)都執(zhí)行action
省略代碼塊{action},等價(jià)于{print},即輸出所有行
省略代碼塊中的action,表示對(duì)篩選的行什么都不做
pattern{action}任何一部分都可以省略
pattern和action
對(duì)于pattern{action}
語(yǔ)句結(jié)構(gòu)(都稱(chēng)之為語(yǔ)句塊),其中的pattern部分可以使用下面列出的模式:
# 特殊pattern
BEGIN
END
# 布爾代碼塊
/regular expression/ # 正則匹配成功與否 /a.*ef/{action}
relational expression # 即等值比較、大小比較 3>2{action}
pattern && pattern # 邏輯與 3>2 && 3>1 {action}
pattern || pattern # 邏輯或 3>2 || 3<1 {action}
! pattern # 邏輯取反 !/a.*ef/{action}
(pattern) # 改變優(yōu)先級(jí)
pattern ? pattern : pattern # 三目運(yùn)算符決定的布爾值
# 范圍pattern,非布爾代碼塊
pattern1, pattern2 # 范圍,pat1打開(kāi)、pat2關(guān)閉,即flip,flop模式
action部分,可以是任何語(yǔ)句,例如print。
通過(guò)本文的介紹,相信讀者對(duì)awk命令的基本使用方法和語(yǔ)法結(jié)構(gòu)有了更深入的了解。無(wú)論是在數(shù)據(jù)處理、文本過(guò)濾還是格式化輸出中,awk都能發(fā)揮出強(qiáng)大的功能。掌握awk的基本用法后,用戶(hù)可以更加靈活高效地處理各種文本數(shù)據(jù),從而提高工作效率和編程能力。希望讀者能通過(guò)不斷實(shí)踐,進(jìn)一步挖掘awk命令的潛力,提升在實(shí)際應(yīng)用中的技巧和方法。
更多技術(shù)分享可以在藍(lán)隊(duì)云官網(wǎng)檢索。