2017-02-13 4 views
0

У меня есть сценарий, который загружает данные из файла, имеющие IP-адреса и соответствующие этому имени клиента. Как нижеПолучить соответствие данных из диапазона чисел perl

XX.XX.XX.XX = ABC 
xx.yy.yyy.xk = BCD 

В массиве у меня есть список IP-адресов, поэтому сверху данных мы получаем имя клиента для IP-адресов в массиве.

my @ips = split(/\,/, $key); 
    for my $ip (@ips) { 
    $name = $hash{Client_Map}{$ip}; 
    } 

Теперь у меня есть диапазон IP-адресов, а также нормальный IP-адресов в файле в файле как

XX.XX.XX.0-244 = BDE 
XX.XX.XY.14-44 = TEST 
XX.XX.XX.XX = ABC 
xx.yy.yyy.xk = BCD 

Как мы можем справиться соответствовать этим IP-адресов в коде, чтобы получить имя клиента. Для загрузки файла мы используем модуль use Config::General Perl.

ответ

3

После прочтения конфигурационного хеша с Config :: General вам необходимо выполнить итерацию по нему, найти ключи, которые являются диапазонами, и удалить их. Используйте два значения из диапазона, чтобы вставить новые ключи в хэш.

Perl's range operator .. - это удобный способ сделать это. Также приятно, что delete возвращает значение для ключа, который был удален.

my $client_map = { 
    '127.0.0.1'  => 'FOO', 
    'XX.XX.XX.0-244' => 'BDE', 
    'XX.XX.XY.14-44' => 'TEST', 
}; 

foreach my $ip_or_range (keys %{$client_map}) { 
    if (my ($lower, $upper) = $ip_or_range =~ m/(\d+)-(\d+)$/) { 
     my $name = delete $client_map->{$ip_or_range}; 
     $ip_or_range =~ s/[^\.]+$//; 
     $client_map->{ $ip_or_range . $_ } = $name for $lower .. $upper; 
    } 
} 

Теперь хеш будет выглядеть примерно так.

\ { 
    127.0.0.1  "FOO", 
    XX.XX.XX.0  "BDE", 
    XX.XX.XX.1  "BDE", 
    XX.XX.XX.2  "BDE", 
    XX.XX.XX.3  "BDE", 
    XX.XX.XX.4  "BDE", 
    XX.XX.XX.5  "BDE", 
    XX.XX.XX.6  "BDE", 
    XX.XX.XX.7  "BDE", 
    XX.XX.XX.8  "BDE", 
    XX.XX.XX.9  "BDE", 
    XX.XX.XX.10 "BDE", 
    XX.XX.XX.11 "BDE", 
    XX.XX.XX.12 "BDE", 
    XX.XX.XX.13 "BDE", 
    XX.XX.XX.14 "BDE", 
    XX.XX.XX.15 "BDE", 
    XX.XX.XX.16 "BDE", 
    XX.XX.XX.17 "BDE", 
    XX.XX.XX.18 "BDE", 
    XX.XX.XX.19 "BDE", 
    XX.XX.XX.20 "BDE", 
    XX.XX.XX.21 "BDE", 
    XX.XX.XX.22 "BDE", 
    XX.XX.XX.23 "BDE", 
    XX.XX.XX.24 "BDE", 
    XX.XX.XX.25 "BDE", 
    XX.XX.XX.26 "BDE", 
    XX.XX.XX.27 "BDE", 
    XX.XX.XX.28 "BDE", 
    XX.XX.XX.29 "BDE", 
    XX.XX.XX.30 "BDE", 
    XX.XX.XX.31 "BDE", 
    XX.XX.XX.32 "BDE", 
    XX.XX.XX.33 "BDE", 
    XX.XX.XX.34 "BDE", 
    XX.XX.XX.35 "BDE", 
    XX.XX.XX.36 "BDE", 
    XX.XX.XX.37 "BDE", 
    XX.XX.XX.38 "BDE", 
    XX.XX.XX.39 "BDE", 
    XX.XX.XX.40 "BDE", 
    XX.XX.XX.41 "BDE", 
    XX.XX.XX.42 "BDE", 
    XX.XX.XX.43 "BDE", 
    XX.XX.XX.44 "BDE", 
    XX.XX.XX.45 "BDE", 
    XX.XX.XX.46 "BDE", 
    XX.XX.XX.47 "BDE", 
    XX.XX.XX.48 "BDE", 
    XX.XX.XX.49 "BDE", 
    XX.XX.XX.50 "BDE", 
    XX.XX.XX.51 "BDE", 
    XX.XX.XX.52 "BDE", 
    XX.XX.XX.53 "BDE", 
    XX.XX.XX.54 "BDE", 
    XX.XX.XX.55 "BDE", 
    XX.XX.XX.56 "BDE", 
    XX.XX.XX.57 "BDE", 
    XX.XX.XX.58 "BDE", 
    XX.XX.XX.59 "BDE", 
    XX.XX.XX.60 "BDE", 
    XX.XX.XX.61 "BDE", 
    XX.XX.XX.62 "BDE", 
    XX.XX.XX.63 "BDE", 
    XX.XX.XX.64 "BDE", 
    XX.XX.XX.65 "BDE", 
    XX.XX.XX.66 "BDE", 
    XX.XX.XX.67 "BDE", 
    XX.XX.XX.68 "BDE", 
    XX.XX.XX.69 "BDE", 
    XX.XX.XX.70 "BDE", 
    XX.XX.XX.71 "BDE", 
    XX.XX.XX.72 "BDE", 
    XX.XX.XX.73 "BDE", 
    XX.XX.XX.74 "BDE", 
    XX.XX.XX.75 "BDE", 
    XX.XX.XX.76 "BDE", 
    XX.XX.XX.77 "BDE", 
    XX.XX.XX.78 "BDE", 
    XX.XX.XX.79 "BDE", 
    XX.XX.XX.80 "BDE", 
    XX.XX.XX.81 "BDE", 
    XX.XX.XX.82 "BDE", 
    XX.XX.XX.83 "BDE", 
    XX.XX.XX.84 "BDE", 
    XX.XX.XX.85 "BDE", 
    XX.XX.XX.86 "BDE", 
    XX.XX.XX.87 "BDE", 
    XX.XX.XX.88 "BDE", 
    XX.XX.XX.89 "BDE", 
    XX.XX.XX.90 "BDE", 
    XX.XX.XX.91 "BDE", 
    XX.XX.XX.92 "BDE", 
    XX.XX.XX.93 "BDE", 
    XX.XX.XX.94 "BDE", 
    XX.XX.XX.95 "BDE", 
    XX.XX.XX.96 "BDE", 
    XX.XX.XX.97 "BDE", 
    XX.XX.XX.98 "BDE", 
    XX.XX.XX.99 "BDE", 
    XX.XX.XX.100 "BDE", 
    XX.XX.XX.101 "BDE", 
    XX.XX.XX.102 "BDE", 
    XX.XX.XX.103 "BDE", 
    XX.XX.XX.104 "BDE", 
    XX.XX.XX.105 "BDE", 
    XX.XX.XX.106 "BDE", 
    XX.XX.XX.107 "BDE", 
    XX.XX.XX.108 "BDE", 
    XX.XX.XX.109 "BDE", 
    XX.XX.XX.110 "BDE", 
    XX.XX.XX.111 "BDE", 
    XX.XX.XX.112 "BDE", 
    XX.XX.XX.113 "BDE", 
    XX.XX.XX.114 "BDE", 
    XX.XX.XX.115 "BDE", 
    XX.XX.XX.116 "BDE", 
    XX.XX.XX.117 "BDE", 
    XX.XX.XX.118 "BDE", 
    XX.XX.XX.119 "BDE", 
    XX.XX.XX.120 "BDE", 
    XX.XX.XX.121 "BDE", 
    XX.XX.XX.122 "BDE", 
    XX.XX.XX.123 "BDE", 
    XX.XX.XX.124 "BDE", 
    XX.XX.XX.125 "BDE", 
    XX.XX.XX.126 "BDE", 
    XX.XX.XX.127 "BDE", 
    XX.XX.XX.128 "BDE", 
    XX.XX.XX.129 "BDE", 
    XX.XX.XX.130 "BDE", 
    XX.XX.XX.131 "BDE", 
    XX.XX.XX.132 "BDE", 
    XX.XX.XX.133 "BDE", 
    XX.XX.XX.134 "BDE", 
    XX.XX.XX.135 "BDE", 
    XX.XX.XX.136 "BDE", 
    XX.XX.XX.137 "BDE", 
    XX.XX.XX.138 "BDE", 
    XX.XX.XX.139 "BDE", 
    XX.XX.XX.140 "BDE", 
    XX.XX.XX.141 "BDE", 
    XX.XX.XX.142 "BDE", 
    XX.XX.XX.143 "BDE", 
    XX.XX.XX.144 "BDE", 
    XX.XX.XX.145 "BDE", 
    XX.XX.XX.146 "BDE", 
    XX.XX.XX.147 "BDE", 
    XX.XX.XX.148 "BDE", 
    XX.XX.XX.149 "BDE", 
    XX.XX.XX.150 "BDE", 
    XX.XX.XX.151 "BDE", 
    XX.XX.XX.152 "BDE", 
    XX.XX.XX.153 "BDE", 
    XX.XX.XX.154 "BDE", 
    XX.XX.XX.155 "BDE", 
    XX.XX.XX.156 "BDE", 
    XX.XX.XX.157 "BDE", 
    XX.XX.XX.158 "BDE", 
    XX.XX.XX.159 "BDE", 
    XX.XX.XX.160 "BDE", 
    XX.XX.XX.161 "BDE", 
    XX.XX.XX.162 "BDE", 
    XX.XX.XX.163 "BDE", 
    XX.XX.XX.164 "BDE", 
    XX.XX.XX.165 "BDE", 
    XX.XX.XX.166 "BDE", 
    XX.XX.XX.167 "BDE", 
    XX.XX.XX.168 "BDE", 
    XX.XX.XX.169 "BDE", 
    XX.XX.XX.170 "BDE", 
    XX.XX.XX.171 "BDE", 
    XX.XX.XX.172 "BDE", 
    XX.XX.XX.173 "BDE", 
    XX.XX.XX.174 "BDE", 
    XX.XX.XX.175 "BDE", 
    XX.XX.XX.176 "BDE", 
    XX.XX.XX.177 "BDE", 
    XX.XX.XX.178 "BDE", 
    XX.XX.XX.179 "BDE", 
    XX.XX.XX.180 "BDE", 
    XX.XX.XX.181 "BDE", 
    XX.XX.XX.182 "BDE", 
    XX.XX.XX.183 "BDE", 
    XX.XX.XX.184 "BDE", 
    XX.XX.XX.185 "BDE", 
    XX.XX.XX.186 "BDE", 
    XX.XX.XX.187 "BDE", 
    XX.XX.XX.188 "BDE", 
    XX.XX.XX.189 "BDE", 
    XX.XX.XX.190 "BDE", 
    XX.XX.XX.191 "BDE", 
    XX.XX.XX.192 "BDE", 
    XX.XX.XX.193 "BDE", 
    XX.XX.XX.194 "BDE", 
    XX.XX.XX.195 "BDE", 
    XX.XX.XX.196 "BDE", 
    XX.XX.XX.197 "BDE", 
    XX.XX.XX.198 "BDE", 
    XX.XX.XX.199 "BDE", 
    XX.XX.XX.200 "BDE", 
    XX.XX.XX.201 "BDE", 
    XX.XX.XX.202 "BDE", 
    XX.XX.XX.203 "BDE", 
    XX.XX.XX.204 "BDE", 
    XX.XX.XX.205 "BDE", 
    XX.XX.XX.206 "BDE", 
    XX.XX.XX.207 "BDE", 
    XX.XX.XX.208 "BDE", 
    XX.XX.XX.209 "BDE", 
    XX.XX.XX.210 "BDE", 
    XX.XX.XX.211 "BDE", 
    XX.XX.XX.212 "BDE", 
    XX.XX.XX.213 "BDE", 
    XX.XX.XX.214 "BDE", 
    XX.XX.XX.215 "BDE", 
    XX.XX.XX.216 "BDE", 
    XX.XX.XX.217 "BDE", 
    XX.XX.XX.218 "BDE", 
    XX.XX.XX.219 "BDE", 
    XX.XX.XX.220 "BDE", 
    XX.XX.XX.221 "BDE", 
    XX.XX.XX.222 "BDE", 
    XX.XX.XX.223 "BDE", 
    XX.XX.XX.224 "BDE", 
    XX.XX.XX.225 "BDE", 
    XX.XX.XX.226 "BDE", 
    XX.XX.XX.227 "BDE", 
    XX.XX.XX.228 "BDE", 
    XX.XX.XX.229 "BDE", 
    XX.XX.XX.230 "BDE", 
    XX.XX.XX.231 "BDE", 
    XX.XX.XX.232 "BDE", 
    XX.XX.XX.233 "BDE", 
    XX.XX.XX.234 "BDE", 
    XX.XX.XX.235 "BDE", 
    XX.XX.XX.236 "BDE", 
    XX.XX.XX.237 "BDE", 
    XX.XX.XX.238 "BDE", 
    XX.XX.XX.239 "BDE", 
    XX.XX.XX.240 "BDE", 
    XX.XX.XX.241 "BDE", 
    XX.XX.XX.242 "BDE", 
    XX.XX.XX.243 "BDE", 
    XX.XX.XX.244 "BDE", 
    XX.XX.XY.14 "TEST", 
    XX.XX.XY.15 "TEST", 
    XX.XX.XY.16 "TEST", 
    XX.XX.XY.17 "TEST", 
    XX.XX.XY.18 "TEST", 
    XX.XX.XY.19 "TEST", 
    XX.XX.XY.20 "TEST", 
    XX.XX.XY.21 "TEST", 
    XX.XX.XY.22 "TEST", 
    XX.XX.XY.23 "TEST", 
    XX.XX.XY.24 "TEST", 
    XX.XX.XY.25 "TEST", 
    XX.XX.XY.26 "TEST", 
    XX.XX.XY.27 "TEST", 
    XX.XX.XY.28 "TEST", 
    XX.XX.XY.29 "TEST", 
    XX.XX.XY.30 "TEST", 
    XX.XX.XY.31 "TEST", 
    XX.XX.XY.32 "TEST", 
    XX.XX.XY.33 "TEST", 
    XX.XX.XY.34 "TEST", 
    XX.XX.XY.35 "TEST", 
    XX.XX.XY.36 "TEST", 
    XX.XX.XY.37 "TEST", 
    XX.XX.XY.38 "TEST", 
    XX.XX.XY.39 "TEST", 
    XX.XX.XY.40 "TEST", 
    XX.XX.XY.41 "TEST", 
    XX.XX.XY.42 "TEST", 
    XX.XX.XY.43 "TEST", 
    XX.XX.XY.44 "TEST" 
} 
+0

@ips содержит все IP-адреса из журнала я должен соответствовать его с диапазоном, который определен в файл, если IP журнала соответствует IP-файлу или диапазон IP-то я должен напечатать имя – Developer

+1

@Developer это просто достаточно. Сначала создайте полный хэш. Это дешевле сделать это один раз, чем выполнять согласование диапазона для каждой линии. – simbabque

 Смежные вопросы

  • Нет связанных вопросов^_^