回到: "Linux系列文章" "Shell系列文章" "Awk系列文章" awk命令行結構和語法結構 awk命令行結構 其中: awk語法結構 awk語法結構即awk代碼部分的結構。 awk的語法充斥著 的模式,它們稱為awk rule。 例如: 上面示例中,有BEGIN語句塊,有END語句塊,還 ...
回到:
awk命令行結構和語法結構
awk命令行結構
awk [ -- ] program-text file ... (1)
awk -f program-file [ -- ] file ... (2)
awk -e program-text [ -- ] file ... (3)
其中:
awk語法結構
awk語法結構即awk代碼部分的結構。
awk的語法充斥著pattern{action}
的模式,它們稱為awk rule。
例如:
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。
關於awk的語法:
- 多個
pattern{action}
可以直接連接連用
- action中多個語句如果寫在同一行,則需使用分號分隔
- pattern部分用於篩選行,action表示在篩選通過後執行的操作
- 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{action}
語句結構(都稱之為語句塊),其中的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) # 改變優先順序
pattern ? pattern : pattern # 三目運算符決定的布爾值
# 範圍pattern,非布爾代碼塊
pattern1, pattern2 # 範圍,pat1打開、pat2關閉,即flip,flop模式
action部分,可以是任何語句,例如print。