sort -t / -k 2 -n INPUT_FILE | perl ipaddress-merge.pl > OUTPUT_FILE
入力される各CIDRに対して、
最後にリスト上の IPアドレスレンジを CIDR に変換・出力する。
以下は※の処理の解説。
既に登録されているアドレスブロック群(A)に対して、処理対象アドレスブロック(B)が
・同じ
| A |
| B |
・隣接も包含もしない
| A |
| B |
| A' |
・隣接する
| A |
| B |
・包含する (処理が常に新規で、入力をアドレスブロックサイズ順に
ソートしておくと、この状況は発生しない)
| A |
| B |
・包含される
| A |
| B |
・(入力が範囲じゃなくてブロック単位なので、一部重なる、は考慮しない)
| A |
| B |
Aの各要素は、始点と終点の重複がない、と想定。
また処理によりそうなるはずだし、ならないといけない。
隣接する時は、以下の3通りがある。
・始点のみ隣接する
| A |
| B |
・終点のみ隣接する
| A |
| B |
・始点と終点の両方が隣接する
| A | | A' |
| B |
包含する時だけ、A が複数存在する場合がある。
| A | | A' |
| B |
(以上)