我需要帮助理解GNU排序的默认算法。我假设它做了一个词典排序,但是我发现了一些与之不相符的行为,例如采用以下字符串:
alex.
alex.a
alex.Z
alexa
alex0
alexZ
alex.~
alex
alex.|
alex.}
alex.abc
使用类似echo 'stuff' | sort
这是我得到的结果:
alex
alex.
alex.~
alex.|
alex.}
alex0
alexa
alex.a
alex.abc
alexZ
alex.Z
我无法弄清楚为什么alex0
和alexa
出现在alex.}
和alex.a
之间
有人可以向我解释一下吗?
答案 0 :(得分:4)
GNU Sort实现了mergesort。您可以在超级用户线程中找到完整的答案。 https://superuser.com/questions/234054/unix-sort-algorithm-implementation
答案 1 :(得分:3)
按大小排序取决于LOCALE设置:
$ sort sort
alex
alex.
alex.~
alex.|
alex.}
alex0
alexa
alex.a
alex.abc
alexZ
alex.Z
$ LC_ALL=C sort sort
alex
alex.
alex.Z
alex.a
alex.abc
alex.|
alex.}
alex.~
alex0
alexZ
alexa
答案 2 :(得分:0)
尝试对此文件进行“排序InFile.txt”,然后更改第一个单词Start to Begin并解释其中的区别?我一直将LC_LOCAL-C设置为无效。 InFile.txt
Start report /* Change Start to Begin to see difference */
MISSING..
NEW file.
Updated files
/home/me/path/To/file.txt
/home/me/path/To/new.txt
/home/me/path/To/old.txt
/home/me/path/To/lost.txt
/home/me/path/To/file.txt
答案 3 :(得分:0)
是的,我想我已经知道了。 “ /”字符似乎被忽略了。我想知道详细信息记录在哪里,也许隐藏在LC_ALL中。