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 陣列為關聯陣列 (關鍵字陣列),索引可為數字或字串,無需宣告大小,元素以 0 或空字串初始化。本文系統整理操作要點。

定義與賦值

# 數字索引
arr[1]="cheng mo"
arr[2]="800927"

# 字串索引 (關聯陣列本質)
arr["first"]="cheng"
arr["last"]="mo"
arr["birth"]="800927"

arr[2] 與 arr["birth"] 皆為 "800927",索引型別不同視為不同鍵。

常用內建函數 (gawk 3.1+)

函數用途範例
length(arr)陣列長度 / 字串長度length(arr) → 4
split(str, arr, fs)分割字串到陣列,返回長度split("a b c", a, " ") → 3
asort(arr[, dest])按值排序,重建 1..n 索引asort(a,b) → 長度
asorti(arr[, dest])按鍵排序,結果存 destasorti(a,b) → 長度

遍歷輸出

無序遍歷 (預設)

for (k in arr) print k, arr[k]
# 順序不可預測

有序遍歷 (連續索引)

n = split(str, arr, " ")
for (i=1; i<=n; i++) print i, arr[i]
# 索引 1..n 保證順序

注意:awk 陣列索引從 1 開始,非 C 風格 0 起始。

鍵存在性檢查與刪除

錯誤示範:直接引用會自動建立鍵

awk 'BEGIN{a["x"]="1"; if(a["y"]!="") print "exist"; for(k in a) print k,a[k]}'
# 輸出:exist / x 1 / y (空值鍵被建立!)

正確寫法:in 運算符

awk 'BEGIN{a["x"]="1"; if("y" in a) print "exist"; for(k in a) print k,a[k]}'
# 輸出:x 1 (無 y 鍵)

刪除鍵

delete arr["key"]    # 刪除單一鍵
delete arr           # 刪除整個陣列 (gawk 4.0+)

多維陣列模擬

awk 底層為一維,以 SUBSEP (預設 \034) 連接多維索引:

arr[2,4] = 1   # 實際鍵為 "2\0344"

九九乘法表範例

awk 'BEGIN{
    for(i=1;i<=9;i++)
        for(j=1;j<=9;j++)
            arr[i,j]=i*j
    for(k in arr) {
        split(k, idx, SUBSEP)
        print idx[1]"*"idx[2]"="arr[k]
    }
}'

多維鍵存在性檢查

if ((i,j) in arr) print "exists"

必須用括號 包裹多維索引。

效能建議

  • 大量數據優先考慮管線 sort 或外部工具
  • 頻繁刪除鍵會留下空洞,定期重建陣列
  • 多維陣列實為字串鍵連接,深層巢狀效能遞減

掌握關聯陣列特性與 in/delete/split/SUBSEP 核心操作,即可駕馭 awk 複雜資料結構處理。

Copyright © Windows教程網 All Rights Reserved