Usar LC_ALL=C
parece dar os resultados corretos para mim na classificação 8.21.
$ LC_ALL=C sort -k1,1 -t , sample.txt
a,2
a?,1
b,1
b?,2
Ou como você escreveu:
$ 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
Por acaso você não precisa do 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
funciona para mim também.
Sobre o uso de sort -k1
vs. sort -k1,1
Os exemplos acima usam uma versão modificada do comando sort
para usar -k1,1
em vez de apenas -k 1
, pois isso levará a problemas de classificação com outros caracteres especiais, como %
.
com apenas -k1
:
$ printf '%s\n' a a%,foo a,bar | LC_ALL=C sort -t, -k1
a
a%,foo
a,bar
com -k1,1
:
$ printf '%s\n' a a%,foo a,bar | LC_ALL=C sort -t, -k1,1
a
a,bar
a%,foo