
转发自: ,外加我自己的摘要
排序是经常使用的操作. 但是,awk的原始版本没有内置的排序功能. 如果要对数组进行排序,则只能自己实现排序功能. 在gawk的3.1版和更高版本中,该扩展提供了数组的排序功能: asort和asorti函数. awk中没有实际的数组或列表,它的数组实际上是由关联数组模拟的,因此gawk中的sort接口全部用于关联数组.
asort函数对关联数组进行排序. 排序数组的值按有序方式排列. 数组的下表变为1、2 ... N,这意味着asort函数将丢弃原始关联数组的下标. 这是因为,如果要以固定顺序访问关联数组,则只能依靠下标的顺序.
n =排序(数据)
for(i = 1; i <= n; i ++)

使用数据[i]
asort可以接受第二个参数,该参数用于存储排序的数据,以便原始数组可以保持不变awk 排序,从而避免下标的丢失(感觉这是最有用的).
n =杂种(来源,目的)
for(i = 1; i <= n; i ++)
用[i]做些事

在gawk3.1.2之后的版本中,还有一个asorti函数,它不基于关联数组的值awk 排序,而是基于关联数组的索引,
n = asorti(来源,目标)
for(i = 1; i <= n; i ++){
尽力[i]直接使用排序索引
...

使用源[目标[i]]进行操作通过排序的索引访问原始数组
gawk的3.1.0和3.1.1版本不提供此功能,但通过asort函数进行仿真并编写自己的asorti函数很容易.
我自己的摘要:
通常使用awk关联数组,如下所示:
awk'

{a [$ 1] ++}
END {对于(键入a){打印一个[key],key}}}
'
上面的行将每行的$ 1用作数组a中的下表,然后计算$ 1(出现的次数). 对于结束时每个数组的下标(即$ 1),将打印与该下标相对应的数组值. 这里有一个问题,awk的for语句无法对数组下标进行排序,通常我们的方法是使用awk打印并添加排序.
现在awk具有更好的排序功能,您可以直接在awk中对数组(或关联数组)进行排序,用法如下:
END {
n = asorti(a,b)
for(i = 1; i <= n; i ++){打印a [b [i]],b [i]}
}
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-169451-1.html
别用这样的新闻来误导读者
以后小日本得对我们点头哈腰了
必将稳步向前