用awk進行文本處理,少不了就是它的數組處理。那麼awk數組有那些特點,一般常見運算又會怎麼樣呢。下面學步園小編來講解下linuxawk數組怎麼定義?linuxawk數組怎麼使用?
linuxawk數組怎麼定義
1:可以用數值作數組索引(下標)
Tarray[1]=「chengmo」
Tarray[2]=「800927」
2:可以用字元串作數組索引(下標)
Tarray[「first」]=「cheng」
Tarray[「last」]=」mo」
Tarray[「birth」]=」800927」
使用中printTarray[1]將得到」chengmo」而printTarray[2]和print[「birth」]都將得到」800927」。
數組相關函數
[chengmo@localhost~]$awk--version
GNUAwk3.1.5
使用版本是:3.1以上,不同版本下面函數不一定相同
得到數組長度(length方法使用)
[chengmo@localhost~]$awk'BEGIN{info="itisatest";lens=split(info,tA,"");printlength(tA),lens;}'
44
length返回字元串以及數組長度,split進行分割字元串為數組,也會返回分割得到數組長度。
(asort使用):
[chengmo@localhost~]$awk'BEGIN{info="itisatest";split(info,tA,"");printasort(tA);}'
4
asort對數組進行排序,返回數組長度。
輸出數組內容(無序,有序輸出):
[chengmo@localhost~]$awk'BEGIN{info="itisatest";split(info,tA,"");for(kintA){printk,tA[k];}}'
4test
1it
2is
3a
for…in輸出,因為數組是關聯數組,默認是無序的。所以通過for…in得到是無序的數組。如果需要得到有序數組,需要通過下標獲得。
[chengmo@localhost~]$awk'BEGIN{info="itisatest";tlen=split(info,tA,"");for(k=1;k<=tlen;k++){printk,tA[k];}}' 1it 2is 3a 4test 注意:數組下標是從1開始,與c數組不一樣。 判斷鍵值存在以及刪除鍵值: 一個錯誤的判斷方法: [chengmo@localhost~]$awk'BEGIN{tB["a"]="a1";tB["b"]="b1";if(tB["c"]!="1"){print"nofound";};for(kintB){printk,tB[k];}}' nofound aa1 bb1 c 以上出現奇怪問題,tB[「c」]沒有定義,但是循環時候,發現已經存在該鍵值,它的值為空,這裡需要注意,awk數組是關聯數組,只要通過數組引用它的key,就會自動創建改序列. 正確判斷方法: [chengmo@localhost~]$awk'BEGIN{tB["a"]="a1";tB["b"]="b1";if("c"intB){print"ok";};for(kintB){printk,tB[k];}}' aa1 bb1 if(keyinarray)通過這種方法判斷數組中是否包含」key」鍵值。 刪除鍵值: [chengmo@localhost~]$awk'BEGIN{tB["a"]="a1";tB["b"]="b1";deletetB["a"];for(kintB){printk,tB[k];}}' bb1 deletearray[key]可以刪除,對應數組key的,序列值。 linuxawk數組怎麼使用 awk的多維數組在本質上是一維數組,更確切一點,awk在存儲上並不支持多維數組。awk提供了邏輯上模擬二維數組的訪問方式。例如,array[2,4]=1這樣的訪問是允許的。awk使用一個特殊的字元串SUBSEP(\034)作為分割欄位,在上面的例子中,關聯數組array存儲的鍵值實際上是2\0344。 類似一維數組的成員測試,多維數組可以使用if((i,j)inarray)這樣的語法,但是下標必須放置在圓括弧中。 類似一維數組的循環訪問,多維數組使用for(iteminarray)這樣的語法遍曆數組。與一維數組不同的是,多維數組必須使用split()函數來訪問單獨的下標分量。split(item,subscr,SUBSEP) [chengmo@localhost~]$awk'BEGIN{ for(i=1;i<=9;i++) { for(j=1;j<=9;j++) { tarr[i,j]=i*j; printi,"*",j,"=",tarr[i,j]; } } }' 1*1=1 1*2=2 1*3=3 1*4=4 1*5=5 1*6=6 …… 可以通過array[k,k2]引用獲得數組內容. 方法二: [chengmo@localhost~]$awk'BEGIN{ for(i=1;i<=9;i++) { for(j=1;j<=9;j++) { tarr[i,j]=i*j; } } for(mintarr) { split(m,tarr2,SUBSEP); printtarr2[1],"*",tarr2[2],"=",tarr[m]; } }' 以上就是關於「linuxawk數組怎麼定義?linuxawk數組怎麼使用」的內容,希望對大家有用。更多資訊請關注學步園。學步園,您學習IT技術的優質平台!