我有一个原始文件与IP地址范围(xx.xx.xx. XX -yy.yy.yy. YY) 我想创建一个转换的范围的新名单到单个IP地址。 (所有的范围都在1-255范围)转换IP范围的IP地址
条件
(1)如在每行的第四个八比特组IP之间的差小于或等于最大
变量(比方说5 )它将循环并将每个迭代报告为单个/ 32地址。
(2)IP地址比最大变量更会被报告为/ 24
以下bash脚本工作正常,IP地址,但它是50000行的文件慢? 任何帮助,将不胜感激。它是其他功能的脚本的一部分,所以我需要留在BASH中。
for i in $data; do
A=$(echo $i | sed 's/-.*//'); B=$(echo $i | sed 's/^.*-//')
A1=$(echo $A | cut -d '.' -f 4); B1=$(echo $B | cut -d '.' -f 4)
diff=`expr $B1 - $A1`
if [ "$diff" == "0" ]; then
echo $A >> $outfile
elif [ "$diff" -gt "0" -a "$diff" -le $max ]; then
echo $A >> $outfile
for a in $(jot "$diff"); do
count=`expr $A1 + $a`
echo $A | sed "s/\.[0-9]*$/.$count/" >> $outfile
done
else
echo $A | sed 's/\.[0-9]*$/.0\/24/' >> $outfile
fi
done
我建议使用已经有库来操纵ipv4地址的语言。不要重新发明轮子。 –
@Glenn,你会怎么做这是“perl”。我可以从这个bash脚本中调用一个简短的perl脚本。 – CA171
CPAN快速搜索“ip地址范围”显示https://metacpan.org/pod/Net::IPAddress::Util::Range看起来像它做你想做的。 –