我有一個原始文件與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看起來像它做你想做的。 –