首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >awk / gawk asorti()问题

awk / gawk asorti()问题
EN

Stack Overflow用户
提问于 2010-06-21 17:44:17
回答 3查看 3.1K关注 0票数 4

gawk的asorti函数有以下问题:

代码语言:javascript
复制
gawk 'BEGIN{ \

  a[1]=6; \

  a[2]=7; \

  a[3]=8; \

  a[21]=9; \

  a[123]=10; \

  t=asorti(a, o); \

  for (i=1; i<=t; i++) { \

    print i,o[i]; \

  } \

}'

结果是:

代码语言:javascript
复制
1 1

2 123

3 2

4 21

5 3

所以这是相当清楚的,按字典顺序排序索引,但是awk的文档说(asort(s,d)):

“使用gawk比较值的正常规则对s的内容进行排序.”

但是,当我将索引本身复制到temp数组并使用asort()对新数组进行排序时,

这似乎还可以(使用类似的方法):

代码语言:javascript
复制
j=1; for(e in a) { temp[j++] = e; }

我做错了吗,还是gawk的asorti()有问题?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-06-21 18:25:55

根据gawk手册:“关于数组的一个重要方面要记住,数组下标总是字符串。”

票数 4
EN

Stack Overflow用户

发布于 2015-04-25 00:13:01

我知道gawk 3有限制,但gawk 4(至少在4.1.1上)是微不足道的:

代码语言:javascript
复制
t=asorti(a, o, "@ind_num_asc");
票数 4
EN

Stack Overflow用户

发布于 2010-06-22 09:16:08

作为一种解决方法,您可以使用这样的方法(您可能需要调整填充):

代码语言:javascript
复制
gawk 'BEGIN { 
  a[1] = 6; a[2] = 7; a[3] = 8; a[21] = 9; a[123] = 10; 
  for (i in a) io[sprintf("%15s", i)] = a[i]
  t = asorti(io, o)
  for (i = 0; ++i <= t;) print i, o[i] + 0
    }'

使用Gnu awk,您甚至可以保留原始键/索引:

代码语言:javascript
复制
WHINY_USERS=oops gawk 'BEGIN { 
  a[1]=6; a[2]=7; a[3]=8; a[21]=9; a[123]=10; 
  for (i in a) o[sprintf("%15s", i)] = a[i]
  for (i in o) print i + 0, o[i]
    }'
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3087031

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档