Chapter 12. Awk Associative Arrays(结合数组)

Posted petewell

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Chapter 12. Awk Associative Arrays(结合数组)相关的知识,希望对你有一定的参考价值。

77. Assigning Array Elements(赋值数组元素)

语法:

1
arrayname[string]=value

  • arrayname 数组的名字
  • string 数组的目录,下标
  • value 值
    数组的下标不一定要是序列,从0-10等,可以是字符串。可以相当于字典。和python差不多

    78. Referring to Array Elements(引用数组元素)

    当定义了一个数组,即使里面没有值,也可以调用。因为系统赋值了空的值
    1
    2
    3
    4
    5
    6
    7
    awk 'BEGIN {
    x=item[105];
    for (105 in item)
    print "yes";
    }'
    yes

定义了item[105],但是里面是没有值的,也能调用成功

79. Browse the Array using For Loop(使用循环浏览数组)

语法

1
for (var in arrayname) actions

80. Delete Array Element(删除数组元素)

语法

1
delete arrayname[index];

也可以使用循环删除数组的所有元素
In GAWK,可以使用delete arrayname删除数组所有元素

81. Multi Dimensional Array(多维数组)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ cat array-multi3.awk
BEGIN {
item["1,1"]=10;
item["1,2"]=20;
item[2,1]=30;
item[2,2]=40;
for (x in item)
print "Index",x,"contains",item[x];
}
$ awk -f array-multi3.awk
Index 1,1 contains 10
Index 1,2 contains 20
Index 2#1 contains 30
Index 2#2 contains 40

下标使用""时,里面的都算一个下标
而没有分号,使用逗号,时,则为多维数组

82. SUBSEP - Subscript Separator(下标分隔符)

下标分隔符默认为#

83. Sort Array Values using asort(使用asort排序数组的值)

asort函数是将数组的值进行排序后,将下标用数字1-n表示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
$ cat asort.awk
BEGIN {
item[101]="HD Camcorder";
item[102]="Refrigerator";
item[103]="MP3 Player";
item[104]="Tennis Racket";
item[105]="Laser Printer";
item[1001]="Tennis Ball";
item[55]="Laptop";
item["na"]="Not Available";
print "------Before asort------"
for (x in item)
print "Index",x,"contains",item[x];
total = asort(item);
print "------After asort------"
for (x in item)
print "Index",x,"contains",item[x];
print "Return value from asort:", total;
}
$ awk -f asort.awk
------Before asort-----
Index 55 contains Laptop
Index 101 contains HD Camcorder
Index 102 contains Refrigerator
Index 103 contains MP3 Player
Index 104 contains Tennis Racket
Index 105 contains Laser Printer
Index na contains Not Available
Index 1001 contains Tennis Ball
------After asort-----
Index 4 contains MP3 Player
Index 5 contains Not Available
Index 6 contains Refrigerator
Index 7 contains Tennis Ball
Index 8 contains Tennis Racket
Index 1 contains HD Camcorder
Index 2 contains Laptop
Index 3 contains Laser Printer
Return value from asort: 8

看到上面的例子,排序后输出并没有按顺序输出,这是因为
for (x in item)输出是无序的,可以使用
for (i=1; i<= total; i++) 进行有序输出

asort不修改原值赋值

下面的例子将不会修改原item数组,而会建立新的数组itemnew来排序

1
total = asort(item, itemnew);

84. Sort Array Indexes using asorti(使用asorti排序indexs的值)

asort用法一样,只不过是排序的对象不一样

注意如果你使用asorti(array),那么原来array的值将会替换成排序后的indexs。所以小心使用,多使用asorti(array,arraynew)

原文:大专栏  Chapter 12. Awk Associative Arrays(结合数组)


以上是关于Chapter 12. Awk Associative Arrays(结合数组)的主要内容,如果未能解决你的问题,请参考以下文章

26期20180705 awk

9.6-9.7 awk

awk 笔记之一 -f 多条命令保存文本

SAS--chapter12

面向对象chapter12

Chapter 2 Open Book——12