怎么排序比较线?


0

我总是假设sort没有任何额外的参数,将按词汇顺序对文件进行排序。但是今天我遇到了以下测试用例:

sort test2.txt
a/a
a/c
a//c
a/d

如您所见,第三行有两个斜杠,因此第二个斜线位于相邻行分别具有字母“c”和“d”的位置。我怀疑在任何代码页中'/'介于'c'和'd'之间,所以我想默认的比较算法并不是严格的词法。

是否有一些预处理(如删除非字母?)或特殊情况(如“一个或多个符号的序列等于任何其他符号序列”?)用于比较符号?

我读了man一页,sort但我发现没有任何启示。

我用

sort --version
sort (GNU coreutils) 8.5
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Mike Haertel and Paul Eggert.

而且我真的需要对数百万个URL进行排序以进行进一步的分析,这些URL假设有词汇顺序 - 我是否可以通过任何选项sort来实现此目的?


我在我的Windows + Cygiwn排序(GNU coreutils)8.15上进行了相同的测试,由Cygwin打包(8.15-1),并按预期排序词汇
qbolec 2014年

Answers:


3

它是您的语言环境,为您的sort命令添加前缀,其中的语言环境设置指定了您所需的归类顺序

$ cat test2.txt
a/d
a/a
a/c
a//c

$ sort test2.txt
a/a
a/c
a//c
a/d

$ LANG=C sort test2.txt
a//c
a/a
a/c
a/d

man sort

   *** WARNING *** The locale specified by the  environment  affects  sort
   order.  Set LC_ALL=C to get the traditional sort order that uses native
   byte values.

GNU

大多数特定于语言的语言环境都具有指定排序行为的表,以忽略标点符号和折叠大小写。这对大多数长时间的计算机用户来说都是直观的!


注意

如果您的数百万个URL包含任何非ASCII字符(这将使它们实际成为IRI),您可能会使用字节值排序获得不需要的结果。您可以使用URL编码来避免此问题,从而有可能使人们难以阅读URL。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.