awk使用筆記:多維陣列(帶例子)
阿新 • • 發佈:2019-01-30
awk通過將下標整體看成一個字串來支援多維陣列。本文結合例子介紹awk多維陣列的賦值及遍歷。
1. 多維陣列
awk通過將下標整體看成一個字串來支援多維陣列,實際上是一維陣列,如array[5,6]=7
,下標5和6連結成字串5SUBSEP6
(數字5和6被視為字串),SUBSEP是awk內建的一個變數,預設值是\034
(檔案分隔符file
separator),可見,awk可以支援任意維的陣列。
2. 陣列賦值
awk變數無須定義,可直接賦值,舉例如下:
- # name ID score
- array["Jelline","201021060111"]=100
- array["SparkandShine"
3. 遍歷陣列
由上面分析可知,awk多維陣列本質上是一維陣列,比較特殊的是多個下標用特殊字元SUBSEP
連結成一個字串,用split
可以將下標分隔開。遍歷多維陣列原始碼如下:
- # 列印陣列
- for(subscript in array){
- split(subscript, a, SUBSEP);
- printf "%s\t%s\t%s\n", a[1], a[2], array[a[1], a[2]]
- }
- # 輸出結果如下:
- SparkandShine201021060118150
- Jelline201021060111100
- # 對於數值,還可以這樣遍歷
- for(i=0; i<
- for(j=0; j<N; j++){
- print array[i, j]
- }
- }
3.1 分割字串split
函式split
用法如下:
- split(string, array [, fieldsep [, seps ]])
將string按fieldsep
分割儲存在array[1],
array[2], ...
, 並將分隔符依次儲存在seps[1],
sep[2], ...
, 最後返回被分割的數目。舉例如下:
- split("cul-de-sac", a,"-", seps)
- a[1]="cul"
- a[2]="de"
- a[3]="sac"
- seps[1]="-"
- seps[2]=
- 函式返回值為3
4. 其他
可以通過以下方法判斷一個數組是否存在指定的下標,用於if
語句,如下:
- (subscript1, subscript2,…)in array