免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5303 | 回复: 10
打印 上一主题 下一主题

AWK 中的数组中的索引及值为什么不排序? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-10-09 02:44 |只看该作者 |倒序浏览
[root@lovexia shell]# awk -F[_.] '{ print $2 }' log | cut -c0-10
2008091704
2008091705
2008091706
2008091707
2008091708
2008091709
[root@lovexia shell]# awk -F[_.] '{ print $2 }' log | cut -c0-10 | awk '{ a[NR]=$1 }END{for(i in a) print "Index: "  i   "  Value: "  a[\i]}'  此处的\是为了在发贴的时候转义i,呵呵,真实的代码中是没有的
Index: 4  Value: 2008091707
Index: 5  Value: 2008091708
Index: 6  Value: 2008091709
Index: 1  Value: 2008091704
Index: 2  Value: 2008091705
Index: 3  Value: 2008091706
[root@lovexia shell]#

为什么第二个命令的输出不是这样:
Index: 1  Value: 2008091704
Index: 2  Value: 2008091705
Index: 3  Value: 2008091706
Index: 4  Value: 2008091707
Index: 5  Value: 2008091708
Index: 6  Value: 2008091709

又如何按我的要求排序输出?

[ 本帖最后由 xwmhmily 于 2008-10-9 02:50 编辑 ]

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
2 [报告]
发表于 2008-10-09 08:01 |只看该作者
用for(i=xxx;i<=ooo;i+=xo)print
代替for(i in ox)

论坛徽章:
1
处女座
日期:2014-12-23 17:59:27
3 [报告]
发表于 2008-10-09 09:35 |只看该作者
谁说 数组是有序的.

论坛徽章:
0
4 [报告]
发表于 2008-10-09 09:45 |只看该作者

回复 #3 leetaedong 的帖子

ls的意思是不是 说awk中的数组开的不是连续的内存?
还有 那为什么结果是那个样子的呢?

论坛徽章:
1
处女座
日期:2014-12-23 17:59:27
5 [报告]
发表于 2008-10-09 09:52 |只看该作者
原帖由 luyi1983 于 2008-10-9 09:45 发表
ls的意思是不是 说awk中的数组开的不是连续的内存?
还有 那为什么结果是那个样子的呢?

呵呵,开的是连续的内存,就一定要存连续的数据?谁说的。
那假如数组是有序的,还要数组排序做什么。

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
6 [报告]
发表于 2008-10-09 09:58 |只看该作者
原帖由 leetaedong 于 2008-10-9 09:52 发表

呵呵,开的是连续的内存,就一定要存连续的数据?谁说的。
那假如数组是有序的,还要数组排序做什么。


是有序的,只不过是以awk自己才知道的顺序排列,换句话讲,就是并不是随机的。

论坛徽章:
1
处女座
日期:2014-12-23 17:59:27
7 [报告]
发表于 2008-10-09 10:21 |只看该作者
原帖由 ly5066113 于 2008-10-9 09:58 发表


是有序的,只不过是以awk自己才知道的顺序排列,换句话讲,就是并不是随机的。

Tim,我说的无序是 因为awk里,数组的下标可以是字串,那这样跟 数字 下标混一起的话,
即使 它本身是有序的话,那输出来的结果也未必是我们要求的那种顺序。

那这样的话,Tim 解释下 asort的作用,它是按什么来排序的呢?

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
8 [报告]
发表于 2008-10-09 10:38 |只看该作者
原帖由 leetaedong 于 2008-10-9 10:21 发表

Tim,我说的无序是 因为awk里,数组的下标可以是字串,那这样跟 数字 下标混一起的话,
即使 它本身是有序的话,那输出来的结果也未必是我们要求的那种顺序。

那这样的话,Tim 解释下 asort的作用,它是按 ...


不错,我们说的不矛盾。
seq 10 | awk '{a[NR]=$0}END{for(i in a) print i}'
可以尝试以上代码,虽然结果是乱序,但你无论执行多少次,它都“乱”的一样。

至于asort,它只能对value排序(arr[key]=value)

论坛徽章:
0
9 [报告]
发表于 2008-10-09 10:41 |只看该作者
awk的数组等价于c++ stl::map
用的是红黑树来存储,你访问awk数组的顺序就是遍历红黑树的顺序

论坛徽章:
1
处女座
日期:2014-12-23 17:59:27
10 [报告]
发表于 2008-10-09 10:57 |只看该作者
原帖由 ly5066113 于 2008-10-9 10:38 发表


不错,我们说的不矛盾。
seq 10 | awk '{a[NR]=$0}END{for(i in a) print i}'
可以尝试以上代码,虽然结果是乱序,但你无论执行多少次,它都“乱”的一样。

至于asort,它只能对value排序(arr[key]=value)


谢谢Tim 指正。 Tim 年纪轻轻,理论实践都很牛,崇拜啊。
你 是怎么由入门到现在的水平,介绍点学习经历和经验,还有就是都看哪些资料啊?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP