回到:linux
awk [ -- ] program-text file ... (1) awk -f program-file [ -- ] file ... (2) awk -e program-text [ -- ] file ... (3)
其中:正則表達式
awk語法結構即awk代碼部分的結構。shell
awk的語法充斥着pattern{action}
的模式,它們稱爲awk rule。express
例如:命令行
awk ' BEGIN{n=3} /^[0-9]/{$1>5{$1=333;print $1} /Alice/{print "Alice"} END{print "hello"} ' a.txt # 等價的單行式: awk 'BEGIN{n=3} /^[0-9]/{$1>5{$1=333;print $1} /Alice/{print "Alice"} END{print "hello"}' a.txt
上面示例中,有BEGIN語句塊,有END語句塊,還有2個main代碼塊,兩個main代碼塊都使用了正則表達式做爲pattern。code
關於awk的語法:blog
pattern{action}
能夠直接鏈接連用pattern
,等價於對每一行數據都執行action
awk '{print $0}' a.txt
{action}
,等價於{print}
即輸出全部行
awk '/Alice/' a.txt
等價於awk '/Alice/{print $0}' a.txt
action
,表示對篩選的行什麼都不作
awk '/Alice/{}' a.txt
pattern{action}
任何一部分均可以省略
awk '' a.txt
對於pattern{action}
語句結構(都稱之爲語句塊),其中的pattern部分能夠使用下面列出的模式:ip
# 特殊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) # 改變優先級 pattern ? pattern : pattern # 三目運算符決定的布爾值 # 範圍pattern,非布爾代碼塊 pattern1, pattern2 # 範圍,pat1打開、pat2關閉,即flip,flop模式
action部分,能夠是任何語句,例如print。get