对于大写字母后跟下划线

时间:2017-03-06 18:27:16

标签: bash sorting collation collate

我正在排序用户名列表。当字母为小写时,sort命令按预期工作。

小写的预期和实际输出:

n
n_123
na
na_123

当字符为大写且后跟下划线时,事情变得奇怪。

大写的预期输出:

N
N_123
NA
NA_123

使用排序的大写实际输出:

N
NA
NA_123
N_123

我以为我能用

来解决这个问题
env LC_COLLATE=C sort $file

但没有骰子。

使用 env LC_COLLATE = C sort

的实际输出
N
NA
NA_123
N_123

我在Mac OS X 10.12.3上运行GNU bash,版本4.4.12(1)-release(x86_64-apple-darwin16.3.0)

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:4)

下划线是ASCII 95,它出现在所有大写字母(A-Z)之后,即65-90。因此,在排序大写字母时总是会出现在_之前。

如果您想在_分隔,那么您可以使用-t _来获得预期的输出:

sort -t _ -k1,1 file
N
N_123
NA
NA_123

sort命令使用小写字母的原因是因为小写字母位于_之后,即97-122