第十二課(下) awk
阿新 • • 發佈:2019-01-28
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
/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(後續處理)