У меня есть текстовый файл с 3 столбцами, разделенными знаком : как отсортировать второй столбец по последним 2 цифрам столбца 2?

У меня есть текстовый файл с 3 столбцами, разделенными знаком : как отсортировать второй столбец по последним 2 цифрам столбца 2?

Вот пример текстового файла:

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так и sortOpenBSD):

$ 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', который поможет определить часть строки, используемую при сортировке.

Связанный контент