Zdá se, že používáte národní prostředí jiné než POSIX.
Zkuste:
export LC_ALL=C
a poté sort
.
info sort
jasně říká:
(1) Pokud používáte jiné než POSIXové národní prostředí (např. nastavením `LC_ALL' na `cs_US'), pak `sort' může produkovat výstup, který je řazen jinak, než jste zvyklí. V takovém případě nastavte proměnnou prostředí `LC_ALL' na `C'. Všimněte si, že nastavení pouze `LC_COLLATE' má dva problémy. Za prvé je neúčinné, pokud je také nastaveno `LC_ALL'. Za druhé, má nedefinované chování, pokud je `LC_CTYPE' (nebo `LANG', pokud `LC_CTYPE' není nastaveno) nastaveno na nekompatibilní hodnotu. Například získáte nedefinované chování, pokud je `LC_CTYPE' `ja_JP.PCK', ale `LC_COLLATE' je `en_US.UTF-8'.
Jako man sort
říká, že „pořadí slovníku“ znamená „uvažovat pouze mezery a alfanumerické znaky“. Například s ohledem na data
The
!quick
brown
@fox
jumps
#over
17
$lazy
dogs
%42
times.
bez ozdob sort
příkaz vytváří
dogs
!quick
#over
$lazy
%42
@fox
17
brown
jumps
The
times.
(vložením řádků začínajících znaky mezery a !
, #
, $
, %
a @
symboly před řádky, které začínají písmeny a číslicemi, tj. alfanumerickými znaky ), ale sort -d
produkuje
dogs
17
%42
brown
@fox
jumps
$lazy
#over
!quick
The
times.
dogs
je stále první, protože začíná mezerami, ale speciální (interpunkční) znaky jsou ignorovány. 17
je před 42
a fox
je mezi brown
a jumps
,přestože 42
a fox
mít před sebou znaky, které by je normálně posunuly před 17
.
____________
v pořadí jejich hodnot ASCII:space=040, !
=041, #
=043, $
=044, %
=045 a @
=0100. Všimněte si, že (bez ohledu na mezerník) je to na některých klávesnicích přibližně zleva doprava.
Chcete-li určit pořadí řazení, jednoduše vytvořte soubor s jiným znakem na každém řádku a seřaďte jej. Výsledný výstup vám řekne pořadí řazení.