Utilisez sort
l' -k
option de pour trier par (plusieurs) colonnes à la fois:
$ sort -k1,1 -k2n input
A 1-2
A 3-4
A 6-8
B 5-9
B 7-10
-k1,1
trie d'abord par la première colonne, puis -k2n
par la seconde¹ numériquement lorsque la première colonne était liée, vous obtenez donc votre sortie dans l'ordre que vous souhaitez: tri par le premier élément de la deuxième colonne, uniquement si le premier élément de la colonne est le même.
Lors du tri numérique, il examine uniquement le champ jusqu'à ce qu'il cesse d'être un nombre, ce qui vous donne une comparaison du premier élément seulement.
Lorsque les deux clés se comparent de la même manière, sort
compare ensuite les lignes complètes lexicalement en tant que comparaison de dernier recours. Par exemple, dans A 1-10
vs A 1-2
, les premières clés sont identiques ( A
chaîne), et la deuxième clé également (les deux sont traitées comme le nombre 1
), donc sort
compare A 1-10
vs A 1-2
lexicalement et ce dernier est plus grand comme 2
tri après 1
. L'implémentation GNU de sort
a une -V
option ou V
un indicateur clé pour effectuer un tri de version , ce qui est comme une comparaison lexicale, sauf que les séquences de chiffres décimaux dans les chaînes sont comparées numériquement, donc sort -k1,1 -k2V
triées A 1-10
après A 1-2
car 10
un nombre est supérieur à 2
.
¹ techniquement, -k2
signifie la partie de la ligne commençant par le deuxième champ (après la première transition d'un non-blanc à un blanc) et se terminant à la fin de la ligne, mais avec le n
drapeau, cela équivaut à -k2,2n
la seule partie principale qui constitue un nombre est considéré.