Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Linux 文字處理利器:awk 入門到精通——模式匹配、流程控制、陣列與實戰統計

編輯:Linux 教學

awk 是「模式掃描與處理語言」,以「模式 {動作}」為核心架構,逐行讀取輸入、切割欄位、匹配模式、執行動作。本文系統整理基礎語法、內建變數、流程控制、陣列操作、BEGIN/END 區塊與三大實戰統計範例。

一、 基礎架構與執行流程

awk 'pattern {action}' file
# 或
awk -f script.awk file
  • 預設輸入分隔符:空白(空格/Tab)
  • 欄位變數:$1、$2... $0 為整行
  • 逐行處理:讀行 → 切欄位 → 對每個 pattern 測試 → 匹配則執行 action → 讀下一行
  • 省略 pattern:匹配所有行;省略 action:預設 print $0

二、 常用 Pattern 類型

類型範例說明
關係運算式$1 > 4, $2 == $3數值/字串比較
正則匹配/pattern/, $2 ~ /John/~ 匹配,!~ 不匹配
範圍模式/start/,/end/從匹配 start 到匹配 end 的所有行
BEGINBEGIN { ... }處理第一行前執行(初始化)
ENDEND { ... }處理完所有行後執行(彙總輸出)

三、 核心內建變數

  • NF:當前行欄位數
  • NR:已讀取記錄數(行號)
  • FILENAME:當前處理檔名
  • FS:輸入欄位分隔符(預設空白,可用 -F 修改)
  • OFS:輸出欄位分隔符(預設空格)
  • RS:輸入記錄分隔符(預設換行)
  • ORS:輸出記錄分隔符(預設換行)

四、 Action 指令集精選

  • I/O:print, printf, getline
  • 流程控制:if/else, while, do/while, for, break, continue, exit
  • 字串函數:length, substr, index, match, gsub, tolower, toupper
  • 數學函數:sqrt, log, exp, int, rand, srand

五、 陣列操作(關鍵進階特性)

  • 關聯陣列:下標為字串,arr["key"] = value
  • 無需宣告/初始化,直接賦值即建立
  • 遍歷:for (k in arr) print k, arr[k]
  • 刪除:delete arr["key"] 或 delete arr(清空)

六、 三大實戰範例

測試資料 test.txt:

Tom 85 90 78
John 92 88 95
Tom 70 80 85
Mary 88 92 90
John 85 89 91

1. 篩選與基礎統計

# 所有 John 的記錄
awk '/John/' test.txt
awk '$2=="John" {print $0}' test.txt

# 第三欄 >= 120(此資料無,示範語法)
awk '$3 >= 120' test.txt

# CSV 格式指定分隔符
awk -F',' '/John/' test.csv

2. BEGIN/END 累加總分

# John 所有科目總分
awk '$2=="John" {sum+=$3+$4+$5} END {print "John total:", sum}' test.txt

# 初始分數 60 再累加
awk 'BEGIN {sum=60} $2=="John" {sum+=$3+$4+$5} END {print sum}' test.txt

3. 陣列分組統計:各人總分

awk '{
    name=$1
    scores[name]+=$2+$3+$4
}
END {
    for (n in scores) print n, scores[n]
}' test.txt

輸出:
Tom 488
John 700
Mary 270

七、 實戰工作流建議

  1. 前置清洗:用 grep/sed/cut 將亂糟糟的日志轉為固定欄位格式。
  2. awk 核心運算:分組、統計、過濾、格式化輸出。
  3. 後續處理:管道傳給 sort/uniq/column -t 美化。

八、 結語

awk 是「單行腳本裡的資料庫引擎」。掌握 模式 {動作} 核心、善用 BEGIN/END 邊界控制、靈活運用關聯陣列分組統計,即能在命令列秒級完成「其他語言需寫幾十行」的文字資料分析任務。參考教學:jiayii.com/awk-tutorial。

Copyright © Windows教程網 All Rights Reserved