Страница 1 из 1

список ип адресов, сортировка

Добавлено: 2018-02-14 18:56:44
pimlab
Есть огромный список ип адресов для фильтрации, его скармливаю как есть трансмиссион.
Решил его немного облегчить так как много дублей, но сортировкой их не убрать и нужен более продвинутый подход.
Покажу на примере:
1.1.0.0 - 1.255.255.255
1.2.2.1 – 1.2.5.255
1.2.3.10 - 1.2.3.10
1.2.3.50 - 1.2.3.60

Видно , что диапазон адресов в строке 1 полностью перекрывает остальные строки
значит они не нужны.
Пните как в скрипте эту проверку сделать.
Пробовал с awk раскидать всё по разным файлам , но что дальше с этим делать.
С таким количеством переменных не сталкивался и вообще не знаю как такое осуществить
Пните , если не сложно , как в shell это оформить

список ип адресов, сортировка

Добавлено: 2018-02-15 18:33:09
skeletor
Посмотреть в исходники ipcalc'a. Это совсем не просто делается.

список ип адресов, сортировка

Добавлено: 2018-02-15 19:03:33
xM
Сортировка списка одиночных IPv4 с подсчётом и сортировкой по частотности

Код: Выделить всё

cat iplist | awk 'BEGIN { FS = "." } ; { printf("%s.%s.%s\n%s.%s.%s.%s\n", $1, $2, $3, $1, $2, $3, $4) }' | sort | uniq -c | sort -rn
отсюда

список ип адресов, сортировка

Добавлено: 2018-02-15 22:59:46
pimlab
skeletor писал(а):Посмотреть в исходники ipcalc'a. Это совсем не просто делается.
Не моё это ... ни бум бум в этом.
Пока на пальцах думаю , как вообще проверку сделать.

Отправлено спустя 5 минут 3 секунды:
xM писал(а):Сортировка списка одиночных IPv4 с подсчётом и сортировкой по частотности

Код: Выделить всё

cat iplist | awk 'BEGIN { FS = "." } ; { printf("%s.%s.%s\n%s.%s.%s.%s\n", $1, $2, $3, $1, $2, $3, $4) }' | sort | uniq -c | sort -rn
отсюда
Сейчас сортировка как- то так, но это чисто косметически :

Код: Выделить всё

cat $dir4/*.gz | gunzip -c | sort -u | sort -t. -k1,1n -k2,2n -k3,3n -k4,4n -k5,5n -k6,6n -k7,7n -k8,8n \
| sed "/^0.0.0.[0-1]/d;/^2[2-5][0-9].0.0.0/d;/^127.0.0.[0-2]-127./d;/^192.168.0.0-192/d;/^169.254.0.0-169/d" \
| sed "s/\-/\./" | awk -F. '$4 >= 0 && $4 != 255 && $8 != 0 && $8 <= 255 {print $1"."$2"."$3"."$4"-"$5"."$6"."$7"."$8}'  \
| sed "s/\-/\./" | awk -F. '($8 != 0 && $8 != 255 && $4 == 0 && $4 = 1 && ($4 <= $8 || $3 <= $7 || $2 <= $6)) || ($4 <= $8 || $3 <= $7 || $2 <= $6) \
{print ":"$1"."$2"."$3"."$4"-"$5"."$6"."$7"."$8}' | $gzip -9c > $dir/blocklist.gz


список ип адресов, сортировка

Добавлено: 2018-03-03 2:02:47
BlitzKrieg
В случаях, когда нужно избавиться от дублей, я заполняю хеш-массив используя в качестве ключа значение, которое нужно "уникализировать".
Ассоциативные массивы есть в bash ну и perl. На бэше, это пара-тройка строк.

Отправлено спустя 25 минут 57 секунд:

Код: Выделить всё

#!/bin/bash

declare -A hash

while read IP; do
  hash["$IP"]=
done < iplist

for IP in "${!hash[@]}"; do
 echo "$IP"
done
Гы, дочитал условие, немного не в тему, но все равно для общего развития полезно :-)

Отправлено спустя 7 минут 12 секунд:
То, что вы нагенерили - ад. Если вы любите людей (себя и окружающих), то не стоит это никому показывать. Я бы сделал аккуратненький скриптик, подключив проверку вхождения адреса в диапазон (ipcalc) или же на perl/python там для этого есть библиотеки.

список ип адресов, сортировка

Добавлено: 2018-03-06 14:27:50
pimlab
Как на гуглил, собрал в кучу ...и на выходе имеем что есть и оно работает.
список имеет 650000 уникальных строк вида (x.x.x.x-ы.ы.ы.ы)
из которых я предпологаю примерно 100000 взаимоисключающиx.

Собственно за помощью сюда и обратился так как на своих начальных знаиях далеко не уедешь.
Дуамю качалщикам этот скрипт + список пригодился бы , а если нет ну мне и так сойдет