Sort
sort
忽略問號
我需要根據第一列中的名稱對文件進行排序。有些名字以問號結尾。
sort
在排序過程中始終忽略此問號:sort -k 1 -t , <<TEST a?,1 a,2 b?,2 b,1 TEST
a?,1 a,2 b,1 b?,2
我真的不在乎
sort
問號是如何排序的,只要它始終如一地這樣做。但它沒有,它似乎改為考慮第二列,即使我sort
明確告訴只使用第一列作為鍵。版本資訊:
$ sort --version sort (GNU coreutils) 8.22 Packaged by Gentoo (8.22 (p1.0))
順便說一句,在 OS X 10.9(其中
sort
將自己標識為“sort (GNU coreutils) 5.93”)上,上述工作對我來說是預期的。
在排序 8.21 上,使用
LC_ALL=C
似乎為我提供了正確的結果。$ LC_ALL=C sort -k1,1 -t , sample.txt a,2 a?,1 b,1 b?,2
或者就像你寫的那樣:
$ cat | LC_ALL=C sort -k1,1 -t , <<TEST a?,1 a,2 b?,2 b,1 TEST a,2 a?,1 b,1 b?,2
順便說一句,您不需要
cat
:$ LC_ALL=C sort -k1,1 -t , <<TEST a?,1 a,2 b?,2 b,1 TEST a,2 a?,1 b,1 b?,2
LC_COLLATE=C
也適用於我。關於使用
sort -k1
vs。sort -k1,1
上面的例子都使用了你的
sort
命令的修改版本,-k1,1
而不是僅僅-k 1
因為這會導致其他特殊字元的排序問題,例如%
.只需
-k1
:$ printf '%s\n' a a%,foo a,bar | LC_ALL=C sort -t, -k1 a a%,foo a,bar
與
-k1,1
:$ printf '%s\n' a a%,foo a,bar | LC_ALL=C sort -t, -k1,1 a a,bar a%,foo