免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 皇家救星
打印 上一主题 下一主题

sort能不能支持稳定排序? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2009-04-13 15:11 |只看该作者

回复 #10 皇家救星 的帖子

楼主举一个sort不稳定排序的例子看看,加了-s参数后

论坛徽章:
0
12 [报告]
发表于 2009-04-13 16:52 |只看该作者
$cat a
1 1
1 2
1 3
2 1

2 2
3 3
3 4
5 5
1 1
1 2
1 1
$sort -k1 a

1 1
1 1
1 1
1 2
1 2
1 3
2 1
2 2
3 3
3 4
5 5

$ sort -k1 -s a

1 1
1 1
1 1
1 2
1 2
1 3
2 1
2 2
3 3
3 4
5 5

$#希望输出
$awk '{if (!text[$1]++) print $1}' a| sort | awk '{if(NR == FNR) { text[$1]=text[$1]?text[$1]"\n"$00;} else {print text[$0];} }' a --                          <

1 1
1 2
1 3
1 1
1 2
1 1
2 1
2 2
3 3
3 4
5 5

论坛徽章:
0
13 [报告]
发表于 2009-04-13 16:53 |只看该作者
网络不好,发个帖子老丢- -

上面的希望输出用awk写的,但是只能支持小批量数据排序,大批量的话awk处理不了,所以不得不找一些替代工具

论坛徽章:
0
14 [报告]
发表于 2009-04-13 16:55 |只看该作者
[root@Mylinux tmp]# sort -k1,1 -s file

1 1
1 2
1 3
1 1
1 2
1 1
2 1
2 2
3 3
3 4
5 5

你的-k参数没用对,-k1其实等于-k1,2
http://bbs2.chinaunix.net/thread-1428003-1-1.html

[ 本帖最后由 ywlscpl 于 2009-4-13 16:57 编辑 ]

论坛徽章:
0
15 [报告]
发表于 2009-04-13 17:21 |只看该作者
呃,确实如此- -

ps: -s参数在aix上不能用,有没有其它代替参数呢?

论坛徽章:
0
16 [报告]
发表于 2009-04-13 17:25 |只看该作者
请看6楼
文件file内容如下:
uucp:5:5:UUCP administrator:/usr/lib/uucp:
uucp:6:2:UUCP administrator:/usr/lib/uucp:
uucp:5:3:UUCP administrator:/usr/lib/uucp:
uucp:6:1:UUCP administrator:/usr/lib/uucp:

awk -F ":" 'NR==FNR{a[$3]=(a[$3]?a[$3]"\n"$00)}NR>FNR{print a[$1]}' file <(awk -F ":" '{b[$3]=1}END{for (j in b) print j}' file|sort -n)
uucp:5:5:UUCP administrator:/usr/lib/uucp:
uucp:5:3:UUCP administrator:/usr/lib/uucp:
uucp:6:2:UUCP administrator:/usr/lib/uucp:
uucp:6:1:UUCP administrator:/usr/lib/uucp:

论坛徽章:
0
17 [报告]
发表于 2009-04-13 17:32 |只看该作者
原帖由 皇家救星 于 2009-4-13 16:53 发表
网络不好,发个帖子老丢- -

上面的希望输出用awk写的,但是只能支持小批量数据排序,大批量的话awk处理不了,所以不得不找一些替代工具


用awk需要把文件读进内存,而awk能使用的内存是有限的,我测试了一下,大概1.*kw条记录数时会出问题

论坛徽章:
0
18 [报告]
发表于 2009-04-13 20:12 |只看该作者
学习了,第一次听这专业术语

论坛徽章:
0
19 [报告]
发表于 2009-04-15 13:22 |只看该作者
看来一时是没办法的了

论坛徽章:
0
20 [报告]
发表于 2009-04-15 13:26 |只看该作者
原帖由 皇家救星 于 2009-4-13 17:32 发表


用awk需要把文件读进内存,而awk能使用的内存是有限的,我测试了一下,大概1.*kw条记录数时会出问题

大批量数据的处理我觉得还是用C/C++合适吧,用awk就算能处理,这个处理时间……
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP