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 43 44 45 46 47 48 49
| * asort # asort 函数可以根据元素的值进行排序 [root@bogon ~]# awk 'BEGIN{t["a"]=66;t["b"]=88;t["c"]=3;for(i in t){print i,t[i]}}' a 66 b 88 c 3 [root@bogon ~]# awk 'BEGIN{t["a"]=66;t["b"]=88;t["c"]=3;asort(t);for(i in t){print i,t[i]}}' 1 3 2 66 3 88 # 数组中元素的值均为数字,但是下标为自定义的字符串,通过asort函数对数组排序后,再次输出数组中的元素时,已经按照元素的值的大小进行了排序,但是,数组的下标也被重置为了纯数字。
[root@bogon ~]# awk 'BEGIN{t["a"]=66;t["b"]=88;t["c"]=3;asort(t,newt);for(i in t){print i,t[i]}}' a 66 b 88 c 3 [root@bogon ~]# awk 'BEGIN{t["a"]=66;t["b"]=88;t["c"]=3;asort(t,newt);for(i in newt){print i,newt[i]}}' 1 3 2 66 3 88 # 对原数组元素值排序的同时,创建一个新的数组,将排序后的元素放置在新数组中。上面两条命令一条打印源数组的值,一条打印新数组的值。
[root@bogon ~]# awk 'BEGIN{t["a"]=66;t["b"]=88;t["c"]=3;len=asort(t,newt);for(i=1;i<=len;i++){print i,newt[i]}}' 1 3 2 66 3 88 # asort函数也有返回值,它的返回值就是数组的长度。这里将asort的返回值保存在了len中
* asorti # asorti 函数可以根据元素的下标进行排序 [root@bogon ~]# awk 'BEGIN{t["z"]=66;t["q"]=88;t["a"]=3;for(i in t){print i,t[i]}}' z 66 a 3 q 88 [root@bogon ~]# awk 'BEGIN{t["z"]=66;t["q"]=88;t["a"]=3;len=asorti(t,newt);for(i=1;i<=len;i++){print i,newt[i]}}' 1 a 2 q 3 z # asorti 函数根据数组t的下标排序后,创建了一个新的数组newt,newt中元素的值即为t数组下标的值,上例中,我们使用len变量保存了asorti函数的返回值,并且输出了最后排序后的新数组。
[root@bogon ~]# awk 'BEGIN{t["z"]=66;t["q"]=88;t["a"]=3;len=asorti(t,newt);for(i=1;i<=len;i++){print i,newt[i]}}' 1 a 2 q 3 z [root@bogon ~]# awk 'BEGIN{t["z"]=66;t["q"]=88;t["a"]=3;len=asorti(t,newt);for(i=1;i<=len;i++){print i,t[newt[i]]}}' 1 3 2 88 3 66 # 根据排序后的下标再次输出对应的元素值,从而达到根据数组下标排序后,输出原数组元素的目的。新数组负责排序老数组的下标,并将排序后的下标作为新数组的元素,而我们输出新数组元素的同时,又将新数组的元素值作为老数组下标,从而输出了老数组中的元素值
|