Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學

Linux awk 命令完整教學:工作流程、內建變數、字串函數、條件判斷與陣列實戰

編輯:系統常見問題解答

1. awk 工作流程

  1. 執行 BEGIN 區塊(初始化)。
  2. 逐行讀取輸入,以換行符分隔記錄。
  3. 依欄位分隔符(預設空白/Tab)切分欄位。
  4. 填充欄位變數:$0 整行,$1 第一欄,$n 第 n 欄。
  5. 執行模式對應的 action。
  6. 重複 2-5 直到檔案結尾。
  7. 執行 END 區塊(收尾)。

2. 基本語法

awk [-F 欄位分隔符] '{pattern + action}' {filenames}
  • pattern:比對條件(可為正則、關係式、範圍)。
  • action:大括號內的動作指令,多語句以分號分隔。
  • -F 可指定分隔符(如 -F':'、-F'\t')。

3. 內建變數速查

變數說明
ARGC命令列參數個數
ARGV命令列參數陣列
ENVIRON環境變數關聯陣列
FILENAME目前處理的檔案名
FNR目前檔案的記錄數(跨檔案重置)
FS輸入欄位分隔符(等同 -F)
NF目前記錄的欄位數
NR已讀總記錄數(跨檔案累計)
OFS輸出欄位分隔符
ORS輸出記錄分隔符
RS輸入記錄分隔符

4. 常用字串函數

  • gsub(r,s) / gsub(r,s,t):全域替換。
  • index(s,t):回傳子字串首次出現位置。
  • length(s):字串長度。
  • match(s,r):測試正則比對。
  • split(s,arr,fs):分割字串存入陣列。
  • sprintf(fmt,expr):格式化字串。
  • sub(r,s):首次替換。
  • substr(s,p) / substr(s,p,n):擷取子字串。

5. BEGIN / END 區塊

awk 'BEGIN { ... 初始化 ... } { ... 每行處理 ... } END { ... 收尾 ... }' file

6. 條件判斷

if (expr) { stmt; } else if (expr2) { stmt2; } else { stmt3; }

7. 關聯陣列(索引可為字串)

awk 陣列底層為雜湊表,遍歷順序非預期順序。常用於統計、去重、聚合。

範例 1:讀取 /etc/passwd 建立使用者名陣列並輸出

awk -F ':' 'BEGIN {count=0} {name[count]=$1; count++} END {for(i=0;i

範例 2:統計單詞出現次數並按數量降序排列

awk -F'\t' '{a[$1]++} END {for(j in a) print a[j], j}' filename | sort -rn | more

輸入:
apple
banana
apple
apple
banana
pear

輸出:
3 apple
2 banana
1 pear

進階提示:搭配 sort、uniq、cut 等工具可構建強大的文字處理管線。

Copyright © Windows教程網 All Rights Reserved