Use a opção --version-sort
em sort
.
Se você olhar o manual ( man sort
), sort
tem uma opção para classificação por números de versão. Aqui está a entrada:
-V, --version-sort
Sort version numbers. The input lines are treated as file
names in form PREFIX VERSION SUFFIX, where SUFFIX matches
the regular expression "(.([A-Za-z~][A-Za-z0-9~]*)?)*". The
files are compared by their prefixes and versions (leading
zeros are ignored in version numbers, see example below).
If an input string does not match the pattern, then it is
compared using the byte compare function. All string com-
parisons are performed in C locale, the locale environment
setting is ignored.
Isso parece respeitar valores alfanuméricos muito melhor do que -n
ou -g
classificação.
Usando o sinal -V
na terceira coluna, você obtém o resultado desejado:
$ sort -t'"' -k2V SAMPLE.CSV
compid,active,tagno
-2147483646,1,"1"
-2147483644,0,"1002"
-2147466196,1,"1361B"
-2147466195,1,"1361B.1"
-2147466194,1,"1361B.2"
-2147483645,0,"10000"
-2147468087,1,"76245"
-2147483127,1,"76245.1"
-2147483126,1,"76245.2"