免费注册 查看新帖 |

Chinaunix

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

sort排序疑问 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2010-12-24 15:58 |只看该作者

论坛徽章:
1
寅虎
日期:2013-08-22 20:18:39
12 [报告]
发表于 2010-12-24 17:40 |只看该作者
回复 11# xiaopan3322


   先谢谢啦,不过还是有个疑问没有解决

针对提供帖子的内容对测试做了更改,发现还是有问题

原文如下:

现在可以明确的是:总列数为n列时,sort -k2 等价于 sort -k2,n
关键对-k2,n的理解,应该是“从第2列起到第n列止的字符串”

按照他的说法 “从第2列起到第n列止的字符串”  应该是baidu开头的那一行排在前面,但是结果好像不对,不知道是否能帮忙解释一下

sort -n -k 2 example.txt
guge 50 c 3000
asohu 100 b 6500
baidu 100 a 5000
google 110 d 5000

已经给ywlscpl发了站内信,不知道你是否能帮忙解释一下呢?

论坛徽章:
0
13 [报告]
发表于 2010-12-24 20:06 |只看该作者
回复 12# ttxy624


    这么和你说吧:
    其实    sort -k2, n    和    sort -k2    其实是等价的。。。
    而       sort -k2, mn  和    sort -k2n  是等价的。。。(m是数字,2-9)
   
    也就是说,当你在第一个k指定域后,后面的那个列的域就不起作用了。。。

    你可以再去看看那两篇帖子,其实说的挺清楚的了……

论坛徽章:
0
14 [报告]
发表于 2010-12-24 23:33 |只看该作者
sort -k 2 example.txt 只以第二字段为关键字进行排序,此时默认为ASCII排序
sort -n -k 2 example.txt 只以第二字段为关键字进行排序,第三字段的不管,此时-n按数字大小排序
楼主要是想要第三字段一起参加排序采用如下命令
sort -n -k2 -k3 example.txt

论坛徽章:
1
寅虎
日期:2013-08-22 20:18:39
15 [报告]
发表于 2010-12-25 11:03 |只看该作者
回复 13# xiaopan3322


    问题可能比较纠结,我又重新翻了几次贴子,发现还是有问题

# sort -k 2 example.txt   
g 110 d 5000
g 50 c 3000
b d a 5000
a d b 6500
默认没有加-n参数时,第2列相同时会再以第3列到第n列排序
而且测试发现当将 a d b 6500 这1行的第3列更改成小于a的ASCII字符时,这1行会排到 b d a 5000 这1行上面
可以得知这种情况下 sort -k 2 等于 sort -k 2,n

# sort -n -k 2 example.txt
a d b 6500
b d a 5000
g 50 c 3000
g 110 d 5000
加上-n参数之后,排序顺序会发生变化,a d b 6500 这1行会排到 b d a 5000 这1行上面
再次测试发现当将 b d a 5000 这1行的第1列更改成小于a的ASCII字符时,这1行会排到 b d a 5000 这1行上面
可以得知这种情况下 sort -k 2 等于 sort -k 2,2

“当你在第一个k指定域后,后面的那个列的域就不起作用了”,也就是说当指定-n参数之后,你说的这句话就是成立的

那么,在你提供的帖子中 ywlscpl 所说的:总列数为n列时,sort -k2 等价于 sort -k2,n关键对-k2,n的理解,应该是“从第2列起到第n列止的字符串” 这个观点也就只有在比较字符串的时候才有用?

那结论就是进行字符串比较时 sort -k 2 等于 sort -k 2,n 进行数值比较时  sort -k 2 等于 sort -k 2 ,2
不知道我理解得对不对,如果是正确的,不知道这个是这个程序的Bug还是特意设计的,目地又是什么呢?

我看到之前那个帖子里面,黑哥也同样的疑问,不知道现在能否发现一下观点?  :wink:

论坛徽章:
0
16 [报告]
发表于 2010-12-26 15:49 |只看该作者
回复 15# ttxy624


        不是bug,是feature

论坛徽章:
0
17 [报告]
发表于 2010-12-27 10:31 |只看该作者
跟第一第三列 都没关系 不加-n 是按字符排序  100 和50 按字符排序 是先比较第一个字符 即1和5  1<5

论坛徽章:
1
寅虎
日期:2013-08-22 20:18:39
18 [报告]
发表于 2010-12-29 12:49 |只看该作者
顶一下,求真解!~:wink:

论坛徽章:
1
寅虎
日期:2013-08-22 20:18:39
19 [报告]
发表于 2010-12-29 13:11 |只看该作者
又发现一个问题,如下:

# sort -k 2 example
3       2       8       1
2       2       8       2
1       2       8       3

# sort -k 2,3 example
1       2       8       3
2       2       8       2
3       2       8       1

# sort -n -k 2 example
1       2       8       3
2       2       8       2
3       2       8       1

# sort -n -k 2,4 example  
1       2       8       3
2       2       8       2
3       2       8       1

使用了-n参数之后,即使指定了POS2也无效,这应该不是feature吧?

论坛徽章:
0
20 [报告]
发表于 2010-12-29 13:15 |只看该作者
回复 19# ttxy624


    你这个例子能说明什么呢,你另外举个比较典型的例子吧,2,2,2和8,8,8出现在例子里不太合适……
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP