强大的排序功能

电脑杂谈  发布时间:2020-04-09 13:20:38  来源:网络整理

awk数组_awk 排序_awk 排序

转发自: ,外加我自己的摘要

排序是经常使用的操作. 但是,awk的原始版本没有内置的排序功能. 如果要对数组进行排序,则只能自己实现排序功能. 在gawk的3.1版和更高版本中,该扩展提供了数组的排序功能: asort和asorti函数. awk中没有实际的数组或列表,它的数组实际上是由关联数组模拟的,因此gawk中的sort接口全部用于关联数组.

asort函数对关联数组进行排序. 排序数组的值按有序方式排列. 数组的下表变为1、2 ... N,这意味着asort函数将丢弃原始关联数组的下标. 这是因为,如果要以固定顺序访问关联数组,则只能依靠下标的顺序.

n =排序(数据)

for(i = 1; i <= n; i ++)

awk 排序_awk 排序_awk数组

使用数据[i]

asort可以接受第二个参数,该参数用于存储排序的数据,以便原始数组可以保持不变awk 排序,从而避免下标的丢失(感觉这是最有用的).

n =杂种(来源,目的)

for(i = 1; i <= n; i ++)

用[i]做些事

awk 排序_awk 排序_awk数组

在gawk3.1.2之后的版本中,还有一个asorti函数,它不基于关联数组的值awk 排序,而是基于关联数组的索引,

n = asorti(来源,目标)

for(i = 1; i <= n; i ++){

尽力[i]直接使用排序索引

...

awk 排序_awk 排序_awk数组

使用源[目标[i]]进行操作通过排序的索引访问原始数组

gawk的3.1.0和3.1.1版本不提供此功能,但通过asort函数进行仿真并编写自己的asorti函数很容易.

我自己的摘要:

通常使用awk关联数组,如下所示:

awk'

awk 排序_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

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      • 韦丹
        韦丹

        必将稳步向前

      • 刘东宇
        刘东宇

        别用这样的新闻来误导读者

      • 今井由香
        今井由香

        以后小日本得对我们点头哈腰了

      热点图片
      拼命载入中...