精通awk系列(6):awk命令結構和awk語法結構


回到:linux


awk命令行結構和語法結構

awk命令行結構

awk [ -- ] program-text file ...        (1)
awk -f program-file [ -- ] file ...     (2)
awk -e program-text [ -- ] file ...     (3)

其中:正則表達式

awk語法結構

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}能夠直接鏈接連用
  • 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部分能夠使用下面列出的模式: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

相關文章
相關標籤/搜索