Використовуйте sort
«сек -k
варіанти , щоб сортувати по (кілька) стовпцями відразу:
$ sort -k1,1 -k2n input
A 1-2
A 3-4
A 6-8
B 5-9
B 7-10
-k1,1
сортує за першим стовпцем спочатку, потім -k2n
за другим¹ чисельно, коли перший стовпець прив’язується, тож ви отримуєте свій вихід у потрібному порядку: сортування за першим елементом другого стовпця, лише якщо перший елемент стовпця однаковий.
Під час сортування чисельно воно вивчить лише поле, поки воно не перестане бути числом, так що ви зможете зіставити лише перший елемент його.
Коли два клавіші порівнюють одне і те ж, то sort
порівнюють повні рядки лексично як порівняння в крайньому випадку. Наприклад, у A 1-10
vs A 1-2
, перші ключі однакові ( A
рядок), а також другий ключ (обидва трактуються як число 1
), тож sort
порівнюється A 1-10
проти A 1-2
лексично, а останній більший за 2
сортування після 1
. Реалізація GNU sort
має -V
опцію або V
прапор ключа для виконання сортування версій , що є подібним до лексичного порівняння, за винятком того, що послідовності десяткових цифр у рядках порівнюються чисельно, так sort -k1,1 -k2V
би сортували A 1-10
після, A 1-2
тому що 10
як число більше, ніж число 2
.
¹ технічно -k2
означає частину рядка, що починається з другого поля (після першого переходу від порожнього до порожнього) і закінчується в кінці рядка, але з n
прапором, що еквівалентно -k2,2n
лише провідної частини що є числом.