AWK數組

AWK數組數組

一.數組格式spa

數組是一個包含一系列元素的表.awk

格式以下:循環

    abc[1]=」xiaohong」統計

    abc[2]=」xiaolan」總結

 

解釋:sort

abc      :爲數組名稱tab

[1][2]:爲數組元素下標,能夠理解爲數組的第1個元素、數組的第2個元素co

」xiaohong」」xiaolan」: 元素內容let

 

例子1:定義數組,而且打印數組元素

[root@tab0 ~]# awk 'BEGIN{a[0]="xiaohong";a[1]="xiaolan";print a[0]}'

xiaohong

[root@tab0 ~]# awk 'BEGIN{a[0]="xiaohong";a[1]="xiaolan";print a[1]}'

Xiaolan

 

例子2:打印出全部元素的下標

[root@tab0 ~]# awk 'BEGIN{a[0]="xiaohong";a[1]="xiaolan";for (i in a)print i;}'

0

1

 

解釋:將a定義爲循環中的取值列表。從數組中取出的是數組的全部元素的下標

 

例子3:咱們將/etc/passwd/ 裏邊的第一類定義成數組

 

[root@localhost ~]#:awk -F: '{{a[NR]=$1;}{print NR,a[NR];}}' /etc/passwd

 

例子4:利用數組統計每個IP的訪問量

[root@tab0 ~]# cat a

192.168.3.1

192.168.3.2

192.168.3.3

192.168.3.4

192.168.3.5

192.168.3.6

192.168.3.7

192.168.3.1

192.168.3.2

192.168.3.3

192.168.3.3

192.168.3.3

192.168.3.2

192.168.3.3

192.168.3.6

192.168.3.6

192.168.3.6

192.168.3.3

192.168.3.2

192.168.3.2

 

解決辦法1:

[root@tab0 ~]# sort a |uniq  -c | sort -nr

      6 192.168.3.3

      5 192.168.3.2

      4 192.168.3.6

      2 192.168.3.1

      1 192.168.3.7

      1 192.168.3.5

      1 192.168.3.4

解決辦法2:

[root@tab0 ~]#  awk '{array[$1]++} END {for(key in array) print array[key],key}' a |sort -k 2 -nr

6 192.168.3.3

5 192.168.3.2

4 192.168.3.6

2 192.168.3.1

1 192.168.3.7

1 192.168.3.5

1 192.168.3.4

 

那咱們再來講說上邊例子中的array[$1]++

(1)Awk在讀取第一行的時候,會讀取這個數組,此時的數組是這樣的:a[192.168.3.1]++

(2)此時a[192.168.3.1]的值是未定義的。

可是因爲後邊有運算符號++。Awk會將數字0自動賦值給a[192.168.3.1]。而後在作++運算

(3)此時a[192.168.3.1]作++ ,也就是0+1獲得的值爲1

(4)那麼在讀第二個192.168.3.1時,此時a[192.168.3.1]的值已經通過上次運算爲1.此時在作一次運算。也就是1+1 如今a[192.168.3.1]的值爲2。

(5)總結,最後的值是多少,也就意味着,192.168.3.1運算了多少次,也意味着192.168.3.1出現了多少次。

 

 

 

 

 

 

執行過程就以下:

[root@tab0 ~]# awk '{a[$1]++;print a[$1]}' a

1

1

1

1

1

1

1

2

2

2

3

4

3

5

2

3

4

6

4

5

 

 

 

其實這與let i++ 是同理

[root@tab0 ~]# i=0

[root@tab0 ~]# let i++

[root@tab0 ~]# echo $i

1

[root@tab0 ~]# let i++

[root@tab0 ~]# echo $i

2

[root@tab0 ~]# let i++

[root@tab0 ~]# echo $i

3

相關文章
相關標籤/搜索