对于后跟下划线的大写字母,排序命令无法按预期工作
sort command not working as expected for uppercase letters followed by underscore
我正在整理用户名列表。当字母是小写时,排序命令按预期工作。
小写的预期和实际输出:
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排序:
N
NA
NA_123
N_123
我是 运行 GNU bash,版本 4.4.12(1)-release (x86_64-apple-darwin16.3.0) on Mac OS X 10.12.3
如有任何帮助,我们将不胜感激。
下划线是 ASCII 95
,它位于所有大写字母 (A-Z
) 之后,即 65-90
。所以在排序中大写字母总是排在 _
.
之前
如果你想在 _
处定界,那么你可以使用 -t _
来获得预期的输出:
sort -t _ -k1,1 file
N
N_123
NA
NA_123
您的 sort
命令使用小写字母的原因是因为小写字母出现在 _
之后,即 97-122
我正在整理用户名列表。当字母是小写时,排序命令按预期工作。
小写的预期和实际输出:
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排序:
N
NA
NA_123
N_123
我是 运行 GNU bash,版本 4.4.12(1)-release (x86_64-apple-darwin16.3.0) on Mac OS X 10.12.3
如有任何帮助,我们将不胜感激。
下划线是 ASCII 95
,它位于所有大写字母 (A-Z
) 之后,即 65-90
。所以在排序中大写字母总是排在 _
.
如果你想在 _
处定界,那么你可以使用 -t _
来获得预期的输出:
sort -t _ -k1,1 file
N
N_123
NA
NA_123
您的 sort
命令使用小写字母的原因是因为小写字母出现在 _
之后,即 97-122