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


27

我以为可以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


为我工作。也许是某个地方的别名?
Matthieu Cartier 2010年

Answers:


17
sort --version-sort filename 

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


4
+1可行,但是为什么呢?文本中只有几个个位数。
亚伦·迪古拉

2
无需更改环境即可工作,+ 1
Meredith

@AaronDigulla:我怀疑它会将版本排序中的字符串视为几乎最愚蠢的排序方式,因此它会忽略语言环境,仅以特殊方式处理数字。
JohnEye '17年

23

在我的情况下,设置LC_ALL = C可以恢复传统的排序顺序。软件包:coreutils版本:8.5-1ubuntu3

export LC_ALL=C 

LANG=C也可以。令我百思不解:LANG被设置为en_US.UTF-8; 为什么*还被特别对待?
亚伦·迪古拉

2
LC_COLLATE是特定于设置sort
暂停,直至另行通知。

在Raspbian // Pixel中为我工作。
ZEE

2
export甚至不需要设置本地甚至可能与其他内容混淆。只需在调用中将其设置即可进行排序:LC_ALL=C sort。例如echo -e 'a\n*\n*b\nc' | LC_ALL=C sort,LC_ALL不会在排序调用之外更改
Hashbrown

1

它按我的预期工作(在cygwin上)。

sort input > output 结果是

AT * AD
AT * Ad
AT *艾迪
AT *我会
AT * IUD
AT *伊藤
AT * OD
AT * UT
AT * Uta
AT *怀亚特
AT * ad
AT *眼睛
AT * id
AT *燕麦
AT *重
AT *欠
AT *赞
AT0S *八十分
AT0S *眼睛的
ATF *沙滩车
ATF *爱迪瓦
ATF *广告
ATF *修饰
ATFKT *倡导者
ATFKT *战胜
ATFKTNK *提倡
ATFKTS *倡导者
ATHT *怀特海
ATHT *白头
ATJ *广告
ATNXNS *注意的
ATNXNS *衰减的
ATNXNS * autoignition的
ATP *阿部
ATP0K *特发性
ATT *加重
ATT *机智
ATT *树木繁茂
ATX * atishoo

是某种东西的别名吗?尝试\sort

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


没有别名。必须是某些ubuntu / debian特定功能。
亚伦·迪古拉

1

版本:排序(GNU coreutils)8.26

我内联:

LANG=C sort FILE

或按功能(更改原始文件):

dosort() { local file="$*"; LANG=C sort ${file} -o ${file}.swp; mv ${file}.swp ${file}; cat ${file} ;}

1

要提供基于其他人评论的简单答案,这不会改变您的环境:

input_program | LC_COLLATE=C sort | output_program

要么

LC_COLLATE=C sort < input_file > output_file

或其组合。


0

使用GNU sort可以使用--dictionary-order

NAME
       sort - sort lines of text files

SYNOPSIS
       sort [OPTION]... [FILE]...
       sort [OPTION]... --files0-from=F

DESCRIPTION
       Write sorted concatenation of all FILE(s) to standard output.

       With no FILE, or when FILE is -, read standard input.

       Mandatory arguments to long options are mandatory for short options too.  Ordering options:

       -b, --ignore-leading-blanks
              ignore leading blanks

       -d, --dictionary-order
              consider only blanks and alphanumeric characters
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.