对于大写字母后跟下划线,排序命令无法按预期工作

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)

任何帮助将非常感激。

anu*_*ava 5

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