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 指令完整教學:文字處理、欄位運算、模式匹配、BEGIN/END 區塊與實戰範例

編輯:Linux 教學

AWK (Aho, Weinberger, Kernighan) 是強大的文字處理腳本語言,擅長欄位切分、條件過濾、統計彙總與格式化報表。本文系統介紹語法與豐富範例。

基本語法

awk 'pattern {action}' input-file > output-file
awk -F',' 'pattern {action}' file.csv   # 指定欄位分隔符

範例資料 (awk_file)

Name,Marks,Max Marks
Ram,200,1000
Shyam,500,1000
Ghyansham,1000
Abharam,800,1000
Hari,600,1000
Ram,400,1000

核心範例分類

需求指令說明
列印所有行awk '{print}' awk_file預設動作
列印第 2、3 欄awk -F',' '{print $2, $3}' awk_file-F',' 設定逗號分隔
模式匹配 (含 Ram 或 Hari)awk '/Ram|Hari/' awk_file正則表達式過濾
第一欄去重awk -F',' '{a[$1]} END {for(i in a) print i}' awk_file關聯陣列去重
特定名稱分數加總 (Ram)awk -F',' '$1=="Ram"{sum+=$2} END {print sum}' awk_file條件累加
第二欄總和awk -F',' '{sum+=$2} END {print sum}' awk_file全欄累加
分組加總 (每人總分)awk -F',' '{a[$1]+=$2} END {for(i in a) print i ", " a[i]}' awk_file關聯陣列分組統計
每組筆數統計awk -F',' '{a[$1]++} END {for(i in a) print i, a[i]}' awk_file計數器
每組第一筆記錄awk -F',' '!a[$1]++' awk_file去重保留首筆
加總並附加至檔案末尾awk -F',' '{x+=$2;y+=$3;print} END {print "Total," x "," y}' awk_file彙總報表

BEGIN / END 區塊

# BEGIN:處理前執行 (初始化、列印標題)
# END:處理後執行 (彙總、輸出統計)
awk 'BEGIN {print "Name\tTotal\tPPT\tDoc\txls"} {printf "%s\t%d\t%d\t%d\t%d\n", $1,$2,$3,$4,$5}' datafile

# 修改輸出欄位分隔符 (OFS)
awk 'BEGIN {OFS="|"} {print $1,$2,$3,$4,$5}' datafile

進階技巧

  • 多檔案處理:awk 'FNR==1 {print "====" FILENAME "===="} {print}' file1 file2
  • 系統指令互動:awk '{cmd="echo " $1; system(cmd)}' file
  • 陣列排序:awk 'END {n=asorti(a, b); for(i=1;i<=n;i++) print b[i], a[b[i]]}' file (gawk 4.1+)
  • 正則捕獲群組:awk 'match($0, /(error|warn): (.*)/, m) {print m[1], m[2]}' logfile (gawk)

常用單行腳本收藏

# 顯示每行長度
awk '{print length, $0}' file

# 統計單字頻率
awk '{for(i=1;i<=NF;i++) freq[$i]++} END {for(w in freq) print w, freq[w]}' file

# 印出超過 80 字元的行
awk 'length > 80' file

# 移除重複行 (保留首次)
awk '!seen[$0]++' file

AWK 雖非通用程式語言,但在文字資料清洗、日誌分析、CSV 統計領域無可取代。熟練關聯陣列與 BEGIN/END 模式,即可寫出簡潔高效的資料處理腳本。

Copyright © Windows教程網 All Rights Reserved