1. 程式人生 > >第十二課(下) awk

第十二課(下) awk

5. awk

awk 是一個維護和處理文字資料檔案的強大語言。在文字資料具有一定的格式時,即每行資料包含多個以分隔符分隔的欄位時,顯得尤其有用。即便是駛入的檔案沒有一定的格式,仍然可以使用 awk 進行基本的處理。簡言之,awk 是一種能處理從瑣碎的小事到日常例行公事的強大語言

5.1 基礎語法

5.1.1 語法格式
awk -F<s> '/PATTERN/ {ACTION}' FILE_NAME
或者直接
awk -F<s> '{ACTION}' FILE_NAME

5.1.2 解釋
* -F<s>
指定分隔符。 預設是以空格作為分隔符。後續會介紹如何使用 -F

設定分隔符,以及如何在 BEGIN 中設定分隔符

  • /PATTERN/
    指定匹配模式。 如果沒有指定匹配模式,則 awk 將處理輸入檔案中的所有記錄

  • {ACTION}
    指定處理方式。 awk 命令中所有的處理方式都要寫在花括號中,多個處理方式之間以分號 ’ ; ’ 隔離

  • FILE_NAME
    指定待處理的檔案。 可以是多個檔案,當然 awk 也支援管道資料

5.1.3 舉例

$ awk -F: '/nobody/ {print $1}' /etc/passwd
nobody
  • -F::指定分隔符為:
  • /nobody/:匹配的模式指定為“包含nobody”的
  • {print $1}:執行的動作為列印 $1
    ,其中$1代表以:分隔的第一區段
  • /etc/passwd/:指定所要處理的檔案

5.2 awk 程式結構——(BEGIN、body、END 區域)

awk 在執行時分為 預處理、正式處理、後續處理 三個階段。對應的,在輸入 awk 命令時,分為 3 個區域,分別是 BEGIN、body、END。其中 正式處理 階段是必備的,而預處理和後續處理階段是可選的

5.2.1 BEGIN(預處理階段)

  • 語法:
    BEGIN { command1;command2;... }

  • 特點:

    • BEGIN 區域的命令,在 body 之前執行,且只執行一次
    • BEGIN 區域常常用來打印表頭資訊,初始化變數
    • BEGIN 區域可包含多條命令
    • BEGIN 這個區域的標識,必須是大寫的

5.2.2 正式處理

5.2.3 END(後續處理)