Sort

‘sort’ 以奇怪的順序產生輸出

  • September 28, 2021

考慮以下輸入進行排序:

cat > foo <<EOM
D,,5014978
DD,,25
D,I,1972765530
D,Y,4223624
-,Y,71285059
YA,I,2
EOM

現在嘗試執行sort foo

在我的任何 Linux 機器(GNU coreutils 版本 6.9-8.26)上嘗試此操作時,輸出未排序。我得到了這個:

$ sort foo
D,,5014978
DD,,25
D,I,1972765530
D,Y,4223624
-,Y,71285059
YA,I,2

顯然,所有的行都D,應該放在一起,並且-應該在任何字母之前。

在 Cygwin (GNU coreutils 8.5) 下執行時,輸出會被排序。註釋?

排序取決於語言環境;具體來說,它取決於$LC_COLLATE(可能被 覆蓋),如果它不存在則$LC_ALL回退到。$LANG該命令locale將向您顯示您正在有效使用的值。參見man 3 strcoll,man 3 setlocale等。

LC_COLLATE=C(或POSIX根本沒有語言環境)導致嚴格的逐字節比較。

LC_COLLATE=en_US.utf8導致字母等價排序,忽略標點符號,相同等價類中的字元同等對待。

引用自:https://unix.stackexchange.com/questions/4422