所以我有一个名为sortingnames.txt的文本文件,它在cat命令下看起来像这样。
A. Thaliana
E. Coli
H. sapiens
S. cerevisiae
A thaliana
E Coli
H sapiens
S cerevisiae
A. Thaliana (plant)
E. Coli (Bacteria)
H. Sapiens (Human)
S. Cerevisiae (Yeast)
203 characters?
A. Thaliana Plant
然后我运行sort命令$ sort -k 3.2 sortingnames.txt。 结果会弹出这样的结果。
203 characters
A thaliana
A. Thaliana
E Coli
E. Coli
H sapiens
H. sapiens
S cerevisiae
S. cerevisiae
E. Coli (Bacteria)
H. Sapiens (Human)
A. Thaliana (plant)
A. Thaliana Plant
S. Cerevisiae (Yeast)
最后5行的顺序对我来说没有意义。假设排序没有像标点符号那样(考虑到大肠杆菌(细菌)的第3个字符是c而下一行(人类)是m。植物系的第3个字符是a,而酵母系是a。
但是bash还是会回来的。有人可以解释原因吗?
答案 0 :(得分:0)
似乎是与en_US.UTF-8
相关的归类序列的问题。在这种情况下,左边的paren - (
- 被有效地忽略,最后5行看起来像:
E. Coli Bacteria)
H. Sapiens Human)
A. Thaliana plant)
A. Thaliana Plant
S. Cerevisiae Yeast)
因此,当您应用-k3.2
时......请记住,计数中包含前导空格 ...您将获得以下排序结果:
' Bacteria)'
' Human)'
' plant)'
' Plant'
' Yeast)'
当您考虑不区分大小写的排序顺序时,小写优先于大写...结果是正确的... en_US.UTF-8
。
尝试更改LANG
变量,例如unset LANG
。在我的SLES环境中,所有LC_*
变量都切换到“POSIX”,当我再次运行排序时,我发现左边的paren现在被视为排序字符串的一部分,因此在应用-k3.2
时,我得到了:
' (Bacteria)
' (Human)
' (Yeast)
' (plant)
' Plant
...但是在这种情况下,左边的paren优先于字母,我们看到区分大小写的排序,大写优先于小写...对于LANG=
(以及各种{{ 1}} variables =“POSIX”)