Вот пример текстового файла:
195.92.211.47:21029:400
195.92.211.48:21023:400
Как отсортировать строки файла по последним двум цифрам второго столбца? Второй столбец всегда состоит из пяти цифр.
решение1
Предположим, что второе :
поле с разделителем всегда содержит пять цифр:
$ sort -t ':' -k2.4,2n file
195.92.211.48:21023:400
195.92.211.47:21029:400
Инструкция -k2.4,2n
по sort
использованию второго поля, начиная с символа 4 и далее (именно это и .4
делается) до конца поля в качестве ключа сортировки и численной сортировке входных данных по этому ключу ( n
в конце). Для численной сортировки повесьвторое поле, вы бы использовали -k2,2n
. Мы привыкли -t ':'
говорить, что поля разделяются двоеточиями.
Вы можете увидеть, что для сортировки используются правильные числа, если выполните команду --debug
(здесь показаны как GNU, sort
так и sort
OpenBSD):
$ gsort --debug -t ':' -k2.4,2n file
gsort: text ordering performed using simple byte comparison
195.92.211.48:21023:400
__
_______________________
195.92.211.47:21029:400
__
_______________________
$ sort --debug -t ':' -k2.4,2n file
Memory to be used for sorting: 2139060224
sort_method=heapsort
; k1=<23>, k2=<29>; s1=<195.92.211.48:21023:400>, s2=<195.92.211.47:21029:400>; cmp1=-1
195.92.211.48:21023:400
195.92.211.47:21029:400
решение2
Использоватьsort -t: -nk2.4
-t uses the delimiter :
-n for numerical sort
-k your key is the second column
Ключевые определения очень хорошо объяснены в info sort
.
'-k POS1[,POS2]'
'--key=POS1[,POS2]'
Укажите поле сортировки, которое состоит из части строки между POS1 и POS2 (или конца строки, если POS2 пропущен), включительно.
Каждый POS имеет вид 'F[.C][OPTS]', где F — номер используемого поля, а C — номер первого символа от начала поля. Поля и позиции символов нумеруются, начиная с 1; позиция символа, равная нулю, в POS2 указывает на последний символ поля. Если '.C' опущено в POS1, по умолчанию используется 1 (начало поля); если опущено в POS2, по умолчанию используется 0 (конец поля). OPTS — это параметры упорядочивания, позволяющие сортировать отдельные ключи по разным правилам; подробности см. ниже. Ключи могут охватывать несколько полей.
Пример: Для сортировки по второму полю используйте '--key=2,2' ('-k 2,2'). Ниже приведены дополнительные примечания по ключам и примеры. Также см. параметр '--debug', который поможет определить часть строки, используемую при сортировке.