Вот версия с использованием awk, которая не требует промежуточного файла.
#!/bin/awk -f
BEGIN {FS="\t"; OFS="\t"}
{
split($9,A,"-");
S1 = sprintf("%d %d %d 0 0 0",A[3],A[1],A[2])
D1 = strftime("%B %d, %Y", mktime(S1))
$9 = D1
print
}
Современный процессор Core должен быть в состоянии справиться с этим.
Тем не менее, не помешает посмотреть, можно ли оптимизировать правила. Одна вещь, которая может помочь в зависимости от распределения IP-адресов, - разбить правила, например, на 8 частей:
iptables -N ourtable
iptables -N ourtable-000
iptables -N ourtable-032
iptables -N ourtable-064
iptables -N ourtable-096
iptables -N ourtable-128
iptables -N ourtable-160
iptables -N ourtable-192
iptables -N ourtable-224
iptables -A INPUT -p tcp --dport 12345 -j ourtable
iptables -A ourtable -s 0.0.0.0/3 -j ourtable-000
iptables -A ourtable -s 32.0.0.0/3 -j ourtable-032
iptables -A ourtable -s 64.0.0.0/3 -j ourtable-064
iptables -A ourtable -s 96.0.0.0/3 -j ourtable-096
iptables -A ourtable -s 128.0.0.0/3 -j ourtable-128
iptables -A ourtable -s 160.0.0.0/3 -j ourtable-160
iptables -A ourtable -s 192.0.0.0/3 -j ourtable-192
iptables -A ourtable -s 224.0.0.0/3 -j ourtable-224
iptables -A ourtable-000 -s 1.2.3.4 -j ACCEPT
...
iptables -A ourtable-000 -j DROP
iptables -A ourtable-032 -s 32.1.2.3 -j ACCEPT
...
iptables -A ourtable-032 -j DROP
# etc...
Таким образом, пакет будет проверен на 625 правил вместо 5000 (при условии, конечно, равномерного распределения адресов, что, вероятно, не так; вы можете настроить разделение всего адресного пространства соответствующим образом).
Я также предполагаю, что в вашем списке уже есть подсети (т.е. если вам нужно разрешить 172.18.0.0 до 172.18.0.7, вы замените это на 172.18.0.0/29). Если нет, проверьте наличие таких диапазонов. В Debian я использую утилиту netmask
, чтобы посмотреть, что охватывает заданная сетевая маска:
$ $ netmask -r 172.18.0.0/29
172.18.0.0-172.18.0.7 (8)