A-K*_*A-K 1 sorting bash collation collate
我正在对用户名列表进行排序。当字母为小写时,排序命令按预期工作。
小写的预期和实际输出:
n
n_123
na
na_123
Run Code Online (Sandbox Code Playgroud)
当字符为大写并后跟下划线时,事情会变得很奇怪。
大写的预期输出:
N
N_123
NA
NA_123
Run Code Online (Sandbox Code Playgroud)
使用sort大写的实际输出:
N
NA
NA_123
N_123
Run Code Online (Sandbox Code Playgroud)
我以为我可以解决这个问题
env LC_COLLATE=C sort $file
Run Code Online (Sandbox Code Playgroud)
但没有骰子。
使用env LC_COLLATE=C sort 的实际输出:
N
NA
NA_123
N_123
Run Code Online (Sandbox Code Playgroud)
我在 Mac OS X 10.12.3 上运行 GNU bash,版本 4.4.12(1)-release (x86_64-apple-darwin16.3.0)
任何帮助将非常感激。
Underscore is ASCII 95
and that comes after all the uppercase letters (A-Z
) i.e. 65-90
. So in sorting uppercase letters will always come before _
.
If you want to delimit at _
then you can use -t _
to get your expected output:
sort -t _ -k1,1 file
N
N_123
NA
NA_123
Run Code Online (Sandbox Code Playgroud)
您的sort
命令使用小写字母的原因是因为小写字母在_
ie之后97-122