Есть огромный access.log 56 млн. строк.
Есть справочник адресов сетей областей 274 строки всего 28 областей
Задача "разрезать" access.log так, чтобы сформировать файл для каждой из 28 областей.
Мой алгоритм, брать по очереди каждую строку из access.log извлекать оттуда адрес накладывать на него маску (взятую из файла областей) и сравнивать по очереди с каждой строкой справочника.
Проблема в том что скорость обработки одной строки около 2-3 секунд, что для файла лога такого объема абсолютно не годится.
Делаю таким скриптом:
#!/bin/shIPLIST=allip.sorted
MAP="structure.name.net.mask"
export IFS="
"
for IPSTRING in `cat $IPLIST`
do
for MAPSTRING in `cat $MAP`
do
MAPNETWORK=`echo $MAPSTRING|awk '{print $2}'`
MASK=`echo $MAPSTRING|awk '{print $3}'`
IPNETWORK=`ipcalc -n \`echo ${IPSTRING}"/"${MASK}\`|sed s/NETWORK=//g`
if [ ${MAPNETWORK} = ${IPNETWORK} ]
then
MAPREGION=`echo $MAPSTRING|awk '{print $1}'`
echo $MAPREGION" "$MAPNETWORK" "$IPNETWORK" "$IPSTRING
break
fi
done
done
Если можете, подскажите, пожалуйста, как можно оптимизировать мою задачу?