1. 程式人生 > >強大的文本處理工具之三awk

強大的文本處理工具之三awk

awk

文本處理三劍客之三,功能十分強大
基本用法

awk [opinions] ‘program‘ var=value file
awk [opinions]  -f  programfile var=value file

通常awk程序由:BEGIN語句塊、可使用模式匹配的通用語句塊、END語句塊組成

基本格式

awk [options] ‘program‘ file 

Pattern和action

  • pattern部分決定動作語句何時觸發以及觸發事件
    BEGIN ,END
  • action statements對數據進行處理,放在 { } 內指明
    print ,printf
    分隔符、域和記錄

    awk在執行時,由分隔符分隔的字段標記$1,$2,$3,$n稱為域表示,$0為所有域,即默認打印所有信息
    文件的每一行稱為記錄
    省略 action,即默認執行print $0 的操作

    工作原理


    1. 執行BEGIN { action } 語句塊中的語句
    2. 從文件/標準輸入讀取第一行,然後執行pattern{ action ;…} 語句塊,逐行執行知道文件讀取完畢
    3. 當讀至輸入流末尾時,執行END{action;…}語句塊
      基本選項:-F 指明輸入時用到的字段分隔符 // -v var=value 自定義變量

      [root@linux-centos7~]# awk -F: ‘{print}‘ /etc/passwd
      上述語句執行結果為/etc/passwd文件中的所有內容,因為print沒有指定任何字段,默認打印所有內容

      [root@linux-centos7~]# awk -F: ‘{print $1,$7}‘ /etc/passwd

      上述語句執行結果為/etc/passwd文件中,以" : "為分隔符第一列和第七列的內容,默認中間用一個空格分隔
      技術分享圖片

      [root@linux-centos7~]# awk -v test=‘hello‘ BEGIN‘{print test}‘ /etc/passwd
      上述語句執行結果只有一個hello,因為在awk裏面-v 賦值test為hello,print打印test變量的值,由於前面有BEGIN,故只輸出BEGIN語句塊執行結果,不會輸出和/etc/passwd文件行數一樣多的hello,因為在BEGIN之後沒有pattern語句

    [root@linux-centos7~]# awk -v test=‘hello‘ BEGIN‘{print test}‘‘{print $1,$7}‘ /etc/passwd

    上述語句則會輸出

強大的文本處理工具之三awk