为什么“排序”会忽略星号等特殊字符?

为什么“排序”会忽略星号等特殊字符?

我以为这sort会将常见前缀排序在一起,但这并不总是发生。以这个输入为例:

AT0S*eightieths
AT0S*eyetooth's
AT*ad
AT*Ad
AT*AD
AT*Eydie
AT*eyed
ATF*adv
ATF*ATV
ATF*edify
ATF*Ediva
ATFKT*advocate
ATFKTNK*advocating
ATFKT*outfought
ATFKTS*advocates
ATHT*whitehead
ATHT*Whitehead
AT*id
AT*I'd
AT*Ito
AT*IUD
ATJ*adage
ATNXNS*attention's
ATNXNS*attenuation's
ATNXNS*autoignition's
AT*oat
AT*OD
AT*outweigh
AT*owed
ATP0K*idiopathic
ATP*adobe
ATT*wighted
ATT*witted
ATT*wooded
AT*UT
AT*Uta
AT*wowed
AT*Wyatt
ATX*atishoo

之后sort,我希望所有的AT*都集中在一个块中,但是当您通过运行这些数据时sort,输出输入==。为什么会这样?我没有指定任何选项来忽略非字母字符或任何其他内容。只是sort dict > out

我的版本sort来自coreutils 8.5-1ubuntu3

答案1

sort --version-sort filename 

这保留了数字的自然顺序。

答案2

在我的例子中,设置 LC_ALL=C 恢复了传统的排序顺序。软件包:coreutils 版本:8.5-1ubuntu3

export LC_ALL=C 

答案3

根据其他人的评论提供一个简单的答案,这不会改变您的环境:

input_program | LC_COLLATE=C sort | output_program

或者

LC_COLLATE=C sort < input_file > output_file

或其组合。

答案4

它对我而言如预期般工作(在 cygwin 上)。

sort input > output结果是

AT*AD
AT *广告
AT*Eydie
AT*我会
宫内节育器
AT*伊藤
距离*OD
美国电话电报公司
AT*乌塔
AT*怀亚特
AT *广告
AT*眼睛
AT*id
AT*燕麦
AT*超过
AT*欠
AT*哇哦
AT0S*八十分之一
AT0S*eyetooth 的
ATF *全地形车
ATF *埃迪瓦
ATF * 高级
ATF*编辑
ATFKT*倡导者
ATFKT*被击败
ATFKTNK*提倡
ATFKTS*倡导者
ATHT*怀特黑德
ATHT*白头
ATJ* 谚语
ATNXNS*关注
ATNXNS*衰减
ATNXNS*自燃
ATP*adobe
ATP0K*特发性
ATT*加权
ATT*witted
ATT*树木繁茂
ATX *阿蒂舒

sort 是否有别名?尝试\sort

环境指定的语言环境会影响排序顺序。设置 LC_ALL=C 可获取使用本机字节值的传统排序顺序

相关内容