LINUX.ORG.RU
ФорумAdmin

Сортировка IP адресов


0

0

Есть IP:
192.168.0.x
192.168.1.x
168.168.2.x

Как с помощью sort отсортировать их по порядку, чтобы было не так:
192.168.0.1
192.168.1.1
192.168.0.2
192.168.1.2
192.168.2.2
192.168.1.5
192.168.2.6
192.168.1.10

А вот так:
192.168.0.1
192.168.0.2
192.168.1.1
192.168.1.2
192.168.1.5
192.168.1.10
192.168.2.2
192.168.2.6

Одной строкой (через "|") без использования промежуточных файлов и сортировать как числа, то есть 192.168.0.10 становится именно после 192.168.0.9, а не после 192.168.0.1

Спасибо.

anonymous

> Одной строкой (через "|") без использования промежуточных файлов и
> сортировать как числа, то есть 192.168.0.10 становится именно после
> 192.168.0.9, а не после 192.168.0.1

Преобразовать в 32-битное представление и отсортировать как числа.

int19h ★★★★
()
Ответ на: комментарий от int19h

Ещё бы знать как, спомощью какой тулзы?

anonymous
()
Ответ на: комментарий от int19h

Извиняюсь, проглядел насчет sort =)

Криво, но работает:

cat iplist \
| sort -n -t. -k4 \
| sort -n -t. -k3 \
| sort -n -t. -k2 \
| sort -n -t. -k1

int19h ★★★★
()
Ответ на: комментарий от sdio

Тут проблема в точке -- как разделителе целой и дробной части
Другое решение:

export LC_NUMERIC=ru_RU.KOI8-R # здесь разделитель -- запятая
cat iplist | sort -t'.' -g -k1 -k2 -k3 -k4

sdio ★★★★★
()
Ответ на: комментарий от int19h

>cat iplist \
>| sort -n -t. -k4 \
>| sort -n -t. -k3 \
>| sort -n -t. -k2 \
>| sort -n -t. -k1

Оно не работает, например вот на таком наборе:

192.168.0.1
192.168.0.2
192.168.1.3
192.168.0.156

anonymous
()
Ответ на: комментарий от sdio

>cat iplist | tr '.' ' '|sort -n -k1 -k2 -k3 -k4|tr ' ' '.'

Работает, только time выдаёт:
real 0m11.816s
user 0m10.760s
sys 0m0.130s

>cat iplist | sort -t'.' -g -k1 -k2 -k3 -k4

Работает, даже в локале UTF-8, без всяких "export LC_NUMERIC...."
Весь секрет в опции -g, я использовал -n. Прочитал про них, и не понял разницы:
-n, --numeric-sort сравнивать численные значения строк
-g, --general-numeric-sort сравнивать числа в общем виде
Если обьясните в чём разница, буду благодарен.
Да и производительность выше, time сортировки того же файла:
real 0m0.448s
user 0m0.370s
sys 0m0.020s

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.