当存在连字符时,按字母顺序对 .csv 文件进行排序无法正常工作

当存在连字符时,按字母顺序对 .csv 文件进行排序无法正常工作

我想对包含不同名称的 .csv 文件进行排序。但是当名称开头有连字符时就会出现问题。

我尝试过类似的事情:

sort -k1 -t
sort -k1 -g -t
sort -k1 -n -t

输入:

other data 
Acid 
other data
Acid
-acid
Acid
-acid
Acid
etc.

输出:

random data
Acid
-acid
-acid
Acid
-acid
etc.

想:

-acid
-acid
-acid
Acid
Acid 
etc.

答案1

背景

目前尚不清楚sort您使用的是哪个版本,但在 CentOS 7.x 系统上使用此版本:

$ sort --version
sort (GNU coreutils) 8.22

这个示例输入文件:

$ cat file
other data
Acid
other data
Acid
-acid
Acid
-acid
Acid

这看起来与您在输出中寻找的内容相匹配:

$ sort -k1 file
-acid
-acid
Acid
Acid
Acid
Acid
other data
other data

语言和区域设置

在上面,我的语言环境设置如下:

$ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

您可以使用以下命令获取完整列表:

$ locale -a
aa_DJ
aa_DJ.iso88591
aa_DJ.utf8
aa_ER
aa_ER@saaho
...

如果您遇到区域设置问题,您可以sort使用C区域设置来解决这些问题:

$ LC_ALL=C sort -k1 file
-acid
-acid
Acid
Acid
Acid
Acid
other data
other data

如果您有诸如 之类的区域设置de_DE,则排序会有所不同:

$ LC_COLLATE=de_DE sort -k1 file
Acid
Acid
Acid
Acid
-acid
-acid
other data
other data

为了再次控制这一点,您可以将区域设置设置为C

参考

相关内容