awk 之 asort 与 asorti 数组排序区别及演示

来源:互联网 发布:知乎推荐书单排行榜 编辑:程序博客网 时间:2024/04/30 15:57
两者排序区别:
asort 是对数组的值进行排序,并且会丢掉原先键值;
asorti是对数组的下标进行排序。

数据文件:
12 34
78 90
23 45

1. awk是关联数组。for…in循环输出时候,默认打印出来是无序数组。
[root@zhenjiang ~]# awk '{a[$1]=$2}END{for(i in a) print i,a[i]}' test 
78 90
12 34
23 45

2. asort排序输出
[root@zhenjiang ~]# awk '{a[$1]=$2}END{slen=asort(a,b);for(i=1;i<=slen;i++) print i"\t"a[i]"\t"b[i]}' test 
134
245
390
在最后执行命令,END中 asort对数组a的值进行排序,把排序后的下标存入新生成的数组b中,丢弃数组a下标值,再把数组a的长度赋值给变量slen。
b[1]=34
b[2]=45
b[3]=90
此时a已经是空数组。
数组的值是无法直接print(输出)的,使用for循环取出数值的下标,输出排序后的数组b下标值及对应数值


3. asorti 排序输出
[root@zhenjiang ~]# awk '{a[$1]=$2}END{slen=asorti(a,b);for(i=1;i<=slen;i++) print i"\t"b[i]"\t"a[b[i]]}' test 
112 34
223 45
378 90
在最后执行命令,END中 asorti对数组a的下标进行排序,并把排序后的下标存入新生成的数组b中,并把数组a的长度赋值给变量l。
b[1]=12
b[2]=23
b[3]=78
数组的值是无法直接print(输出)的,使用for循环取出数值的下标,输出排序后的数组b下标值及对应数值,再把数组b的值当作数组a的下标值打印数组a的值。
0 0
原创粉丝点击