luhg的个人博客分享 http://blog.sciencenet.cn/u/luhg

博文

[转载]awk 之 asort 与 asorti 数组排序区别及演示

已有 1768 次阅读 2021-2-6 11:54 |个人分类:计算机|系统分类:科研笔记|文章来源:转载


两者排序区别:

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 

1 34

2 45

3 90

在最后执行命令,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 

1 12 34

2 23 45

3 78 90

在最后执行命令,END中 asorti对数组a的下标进行排序,并把排序后的下标存入新生成的数组b中,并把数组a的长度赋值给变量l。

b[1]=12

b[2]=23

b[3]=78

数组的值是无法直接print(输出)的,使用for循环取出数值的下标,输出排序后的数组b下标值及对应数值,再把数组b的值当作数组a的下标值打印数组a的值。




https://blog.sciencenet.cn/blog-2343314-1270906.html

上一篇:Linux输出时,去掉buufer,实时输出结果到文件
下一篇:常用的shell和awk命令
收藏 IP: 171.117.191.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-11-23 20:05

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部