Use sort
a -k
opção para classificar por (várias) colunas de uma vez:
$ sort -k1,1 -k2n input
A 1-2
A 3-4
A 6-8
B 5-9
B 7-10
-k1,1
classifica pela primeira coluna primeiro e depois -k2n
pela segunda¹ numericamente quando a primeira coluna foi ligada, para que você obtenha sua saída na ordem que deseja: classificando pelo primeiro elemento da segunda coluna, somente se o primeiro elemento da coluna for o mesmo.
Ao classificar numericamente, ele examinará o campo apenas até que ele pare de ser um número, de modo que você faça uma comparação apenas do primeiro elemento dele.
Quando as duas chaves comparam o mesmo, sort
compara as linhas completas lexicamente como uma comparação de último recurso. Por exemplo, em A 1-10
vs A 1-2
, as primeiras chaves são idênticas ( A
string) e a segunda chave também (ambas são tratadas como o número 1
); portanto, sort
compara A 1-10
vsA 1-2
lexicamente e a última é maior conforme as 2
sortes seguintes 1
. A implementação do GNU de sort
tem uma -V
opção ou V
sinalizador de chave para executar uma classificação de versão , que é como uma comparação lexical, exceto que as seqüências de dígitos decimais nas seqüências de caracteres são comparadas numericamente, então sort -k1,1 -k2V
seria ordenada A 1-10
depois A 1-2
porque o 10
número é maior que 2
.
¹ tecnicamente, -k2
significa a parte da linha que começa com o segundo campo (após a primeira transição de um não-espaço em branco para um espaço em branco) e termina no final da linha, mas com o n
sinalizador é equivalente a -k2,2n
apenas a parte principal que constitui um número é considerado.