gawk的asorti函数有以下问题:
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]; \
} \
}'结果是:
1 1
2 123
3 2
4 21
5 3所以这是相当清楚的,按字典顺序排序索引,但是awk的文档说(asort(s,d)):
“使用gawk比较值的正常规则对s的内容进行排序.”
但是,当我将索引本身复制到temp数组并使用asort()对新数组进行排序时,
这似乎还可以(使用类似的方法):
j=1; for(e in a) { temp[j++] = e; }我做错了吗,还是gawk的asorti()有问题?
发布于 2010-06-21 18:25:55
根据gawk手册:“关于数组的一个重要方面要记住,数组下标总是字符串。”
发布于 2015-04-25 00:13:01
我知道gawk 3有限制,但gawk 4(至少在4.1.1上)是微不足道的:
t=asorti(a, o, "@ind_num_asc");发布于 2010-06-22 09:16:08
作为一种解决方法,您可以使用这样的方法(您可能需要调整填充):
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,您甚至可以保留原始键/索引:
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]
}'https://stackoverflow.com/questions/3087031
复制相似问题