免费注册 查看新帖 |

Chinaunix

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

仍然没能理解sort的k参数 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-07-02 23:25 |只看该作者 |倒序浏览
如题,在学习sort排序的时候,搜索了论坛的很多帖子。关于k参数,仍然没能理解。 这个例子是ywlscpl学长在一个帖子回复中举的。原帖我找不到了。

文本file如下
a1,9,2,21
a2,9,4,11
b1,8,7,15
b2,8,1,17
c1,7,6,24
c2,7,3,13

# sort -t, -k2  file
c2,7,3,13
c1,7,6,24
b3,8,1,12
b2,8,1,17
b1,8,7,15
a1,9,2,21
a2,9,4,11
对于这个结果,我的理解是:如果k后面只有一个数字,表明每行从这个字段开始一直比较到该行最后一个字段结束。
例如 c2 和 c1行的第二个字段 都是7,所以接着比较第三个字段,由于c2的第三个字段是数字3 小于 c1的第三个字段数字6,所以被排在了前面。

# sort -t, -k2,2  file
c1,7,6,24
c2,7,3,13
b1,8,7,15
b2,8,1,17
b3,8,1,12
a1,9,2,21
a2,9,4,11

这个结果我就很模糊了,我理解的是-k2,2表示仅仅比较每行的第二个字段。那么在第二个字段相同的时候,又以哪个字段作为标准排序呢?
从结果来看,好像以第一个字段排序。不知道我的理解对没有,请各位指点一下,感谢。

论坛徽章:
0
2 [报告]
发表于 2009-07-02 23:42 |只看该作者
可以用例子验证下-k2,2n这行种情况下sort如何对后面字段排序的,记得好像是sort会自做主张排序的

[ 本帖最后由 ywlscpl 于 2009-7-2 23:50 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2009-07-02 23:56 |只看该作者
-s可以禁止sort的自做主张排序
http://bbs2.chinaunix.net/thread-1422959-1-4.html

论坛徽章:
0
4 [报告]
发表于 2009-07-03 00:39 |只看该作者
-k, --key=POS1[,POS2]
              start a key at POS1, end it at POS2 (origin 1)
-s, --stable
              stabilize sort by disabling last-resort comparison

论坛徽章:
0
5 [报告]
发表于 2009-07-03 09:17 |只看该作者
-k3n,3 后面的3在這里有意義嗎?

论坛徽章:
0
6 [报告]
发表于 2009-07-03 09:17 |只看该作者
-k3n,3 后面的3在這里有意義嗎?

论坛徽章:
0
7 [报告]
发表于 2009-07-03 11:44 |只看该作者

回复 #6 star_wm_craft 的帖子

如果加上3表示按照域4排序,如果不加的话,表示按域3后面所有字符排序

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
8 [报告]
发表于 2009-07-03 11:47 |只看该作者

回复 #6 star_wm_craft 的帖子

当然有意义了,你可以试试。

-k 3n,3 按3 1-2 4-排序。
-k 3n 按3- 1-2排序。

论坛徽章:
0
9 [报告]
发表于 2009-07-03 13:25 |只看该作者
原帖由 ywlscpl 于 2009-7-2 23:56 发表
-s可以禁止sort的自做主张排序
http://bbs2.chinaunix.net/thread-1422959-1-4.html


$ sort -t, -k2,2n file1
c1,7,6,24
c2,7,3,13
b1,8,7,15
b2,8,1,17
b3,8,1,12
a1,9,2,21
a2,9,4,11

$ sort -t, -k2,2 -s file1
c1,7,6,24
c2,7,3,13
b1,8,7,15
b2,8,1,17
b3,8,1,12
a1,9,2,21
a2,9,4,11

请问ywlscplv学长,我在上面的实例中加上了s,可是结果确一样。这是为什么呢?

论坛徽章:
0
10 [报告]
发表于 2009-07-03 13:31 |只看该作者
原帖由 南无小和尚 于 2009-7-3 00:39 发表
-k, --key=POS1[,POS2]
              start a key at POS1, end it at POS2 (origin 1)
-s, --stable
              stabilize sort by disabling last-resort comparison

当然有意义了,你可以试试。

-k 3n,3 按3 1-2 4-排序。
-k 3n 按3- 1-2排序。


感谢两位的回复,又理解了一点。:wink:

另外,-k 3n,3 上面第2,3,4个字段已经是数字了,为什么还要使用n呢,是否有什么技巧?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP