Usa l sort
' -k
opzione per ordinare per (più) colonne contemporaneamente:
$ sort -k1,1 -k2n input
A 1-2
A 3-4
A 6-8
B 5-9
B 7-10
-k1,1
ordina prima la prima colonna, poi -k2n
numericamente la seconda¹ quando la prima colonna era legata, in modo da ottenere l'output nell'ordine desiderato: ordinamento in base al primo elemento della seconda colonna, solo se il primo elemento della colonna è lo stesso.
Quando si ordina numericamente, esaminerà il campo solo fino a quando non smette di essere un numero, in modo che ti dia un confronto solo del primo elemento di esso.
Quando le due chiavi si confrontano allo stesso modo, sort
confronta le righe complete in modo lessicale come confronto di ultima istanza. Ad esempio in A 1-10
vs A 1-2
, le prime chiavi sono identiche ( A
stringa), e anche la seconda chiave (entrambe sono trattate come il numero 1
), quindi sort
confronta A 1-10
vs A 1-2
lessicamente e quest'ultima è maggiore come 2
ordinamento dopo 1
. L'implementazione GNU di sort
ha -V
un'opzione o V
un flag chiave per eseguire un ordinamento di versione , che è come un confronto lessicale, tranne per il fatto che le sequenze di cifre decimali all'interno delle stringhe vengono confrontate numericamente, quindi sort -k1,1 -k2V
verranno ordinate A 1-10
dopo A 1-2
perché 10
un numero è maggiore di 2
.
¹ tecnicamente, -k2
indica la parte della linea che inizia con il secondo campo (dopo la prima transizione da un non vuoto a uno vuoto) e termina alla fine della linea, ma con la n
bandiera, equivale a -k2,2n
solo la parte iniziale che costituisce un numero è considerato.