Используйте 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
только ведущей части это число считается.