默认AWK打印关联数组时,多半不会排序。
感觉上,关联数组的key是3位以上就不会排序了。
awk 'BEGIN{a["A"]="4";a["B"]="3";a["C"]="2";a["D"]="1";for(i in a)print i,a[i]}'
A 4
B 3
C 2
D 1
awk 'BEGIN{a["AA"]="4";a["BB"]="3";a["CC"]="2";a["DD"]="1";for(i in a)print i,a[i]}'
AA 4
BB 3
CC 2
DD 1
awk 'BEGIN{a["AAA"]="4";a["BBB"]="3";a["CCC"]="2";a["DDD"]="1";for(i in a)print i,a[i]}'
AAA 4
CCC 2
BBB 3
DDD 1
awk 'BEGIN{a["AAAA"]="4";a["BBBB"]="3";a["CCCC"]="2";a["DDDD"]="1";for(i in a)print i,a[i]}'
CCCC 2
BBBB 3
AAAA 4
DDDD 1
这时候加上 PROCINFO["sorted_in"] = "@ind_str_asc"
awk 'BEGIN{a["AAAA"]="4";a["BBBB"]="3";a["CCCC"]="2";a["DDDD"]="1";PROCINFO["sorted_in"]="@ind_str_asc";for(i in a)print i,a[i]}'
AAAA 4
BBBB 3
CCCC 2
DDDD 1
可以实现排序。这个功能对版本有限制,我在4.2.1实现,上网搜了一下,4好像就可以了。
排序可以有多种方式,具体GNU网站英文的8.1.6节有列表。
大致以下列表
以@x_y_z的式样
x:基于索引(ind)还是值(val)来排序
y:按字符串(str)比较,按数值(num)比较和按类型(type)比较。如果是按照类型,在升序的情况下,数值-->字符串-->数组
z:指定升序(asc)或者降序(desc)
@unsorted:默认值 无序。
@ind_str_asc:基于索引按字符串比较方式升序排序。
@ind_str_desc:基于索引按字符串比较方式降序排序。
@ind_num_asc:基于索引按数值比较方式升序排序。无法转换成数值的一律视作数值0。
@ind_num_desc:基于索引按数值比较方式降序排序。无法转换成数值的一律视作数值0。
@val_type_asc:基于元素按照数据类型比较方式升序排序。
@val_type_desc:基于元素按照数据类型比较方式降序排序。
@val_str_asc:基于元素按照字符串比较方式升序排序。
@val_str_desc:基于元素按照字符串比较方式降序排序。
@val_num_asc:基于元素按照数值比较方式升序排序。
@val_num_desc:基于元素按照数值比较方式降序排序。