我想对包含不同名称的 .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
。