awk 數組執行個體

來源:互聯網
上載者:User

awk 數組執行個體

awk的數組,一種關聯陣列(Associative Arrays),下標可以是數字和字串。因無需對數組名和元素提前聲明,也無需指定元素個數 ,所以awk的數組使用非常靈活。

首先介紹下幾個awk數組相關的知識點:

<1>建立數組

array[index] = value :數組名array,下標index以及相應的值value。

<2>讀取數組值

{ for (item in array)  print array[item]} # 輸出的順序是隨機的

{for(i=1;i<=len;i++)  print array[i]} # Len 是數組的長度

<3>多維陣列,array[index1,index2,……]:SUBSEP是數組下標分割符,預設為“\034”。可以事先設定SUBSEP,也可以直接在SUBSEP的位置輸入你要用的分隔字元,如:

awk 'BEGIN{SUBSEP=":";array["a","b"]=1;for(i in array) print i}'

a:b

awk 'BEGIN{array["a"":""b"]=1;for(i in array) print i}'

a:b

但,有些特殊情況需要避免,如:

awk 'BEGIN{

SUBSEP=":"

array["a","b:c"]=1               # 下標為“a:b:c”

array["a:b","c"]=2               #下標同樣是“a:b:c”

for (i in array) print i,array[i]}'

a:b:c 2                        #所以數組元素只有一個。

<4>刪除數組或數組元素: 使用delete 函數

delete array                     #刪除整個數組

delete array[item]           # 刪除某個數組元素(item)

<5> 排序:awk中的asort函數可以實現對數組的值進行排序,不過排序之後的數組下標改為從1到數組的長度。在gawk 3.1.2以後的版本還提供了一個asorti函數,這個函數不是依據關聯陣列的值,而是依據關聯陣列的下標排序,即asorti(array)以後,仍會用數字(1到數組長度)來作為下標,但是array的數組值變為排序後的原來的下標,除非你指定另一個參數如:asorti(a,b)。(非常感謝lionfun對asorti的指正和補充)

cat test

2 d

3 t

6 a

8 b

g u

m c

0 d

5 e

awk '{a[$1]=$2;}END{len=asorti(a); for(i=1;i<=len;i++) print i,a[i]}' test

1 0

2 2

3 3

4 5

5 6

6 8

7 g

8 m

awk '{a[$1]=$2;}END{len=asorti(a,b); for(i=1;i<=len;i++) print i,b[i],a[b[i]]}' test #利用asort函數對數組a的值排序,同時獲得數組長度len

1 0 d

2 2 d

3 3 t

4 5 e

5 6 a

6 8 b

7 g u

8 m c

原文:

http://www.51testing.com/?uid-363787-action-viewspace-itemid-242169

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.