Eu esperaria que o -g
sinalizador diga sort
para tratar os campos como números de ponto flutuante, mas:
cat << EOF | sort -g -k1,2
0 0
0 1.0
0 .5
0 5.0
EOF
dá
0 0
0 1.0
0 .5
0 5.0
Portanto the .5
não é tratado como um 0.5
. Este é um bug conhecido ou o quê?
ps: não estou pedindo solução alternativa, já resolvi comsed
Ao fazer isso
sort -g -k1,2
, todo o texto da chave 1 à chave 2 é considerado um campo. Portanto, o texto que a classificação tenta analisar é0 0
,,0 1.0
etc., e não0
,0
separadamente ou0
,1.0
separadamente. Não tem nada a ver com o zero inicial (exceto na medida em que afeta a classificação lexicográfica). Você pode verificar isso usando outros formatos de ponto flutuante. Tomando esta entrada, por exemplo:Nós temos:
Claramente está fazendo classificação lexicográfica em
1.1e-1
e1.0
.O que você quer é definir cada campo como uma chave separadamente:
Ou:
E então obtemos a ordem esperada: