
数组是awk的亮点. 我如何遍历数组? for(i in a)是最有效的awk数组排序,也是我们的最爱;但问题是它没有排序. 今天我们学习了各种各样的函数,asorti函数可以解决我们的问题!
asort(a [,b])是对数组的值进行排序,并且会丢失原始键值;返回数组元素的数量.
asorti(a,b)对数组索引进行排序;返回数组元素的数量.

数据文件数据内容:
1 1 20 2 25 45 3 20 94 4 60 30
[li0924@localhost awk]$ awk '{a[$1]=$2}END{for(i in a) print i,a[i]}' data 60 30 1 20 20 94 25 45
[li0924@localhost awk]$ awk '{a[$1]=$2}END{for(i=1;i<=asort(a,b);i++) print i"\t"b[i]}' data 1 20 2 30 3 45 4 94
[Parse]在命令的最后执行中awk数组排序,END中的asort对数组a的值进行排序,将排序后的索引存储到新生成的数组b中,并丢弃数组a的索引,但是此时,数组a不是一个空数组,[1]仍然是20.

b [1] = 20
b [2] = 30
b [3] = 45

b [4] = 94
不能直接打印(输出)数组值. 使用for循环获取值的索引,并输出排序后的数组b的索引值和对应的值.
[li0924@localhost awk]$ awk '{a[$1]=$2}END{l=asorti(a,b);for(i=1;i<=l;i++) print i"\t"b[i]"\t"a[b[i]]}' data 1 1 20 2 20 94 3 25 45 4 60 30

[解析]在命令的最后执行中,END中的asorti对数组a的索引进行排序,将排序后的索引存储到新生成的数组b中,并将数组a的长度分配给变量l.
b [1] = 1
b [2] = 20
b [3] = 25
b [4] = 60
不能直接打印(输出)数组值. 使用for循环获取下标的值,输出排序后的数组b的索引值和相应的值,然后将数组b的值用作数组a的索引. 值显示数组a的值.
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-151416-1.html
加油~~永远支持三只
你收家里
成为写手的大有人在