次の文字列のリスト(並べ替えられたIPアドレス範囲)があります。
10.100.0.0-10.100.255.255 External: 2.2.2.2
10.120.0.0-10.255.255.255 External: 2.2.2.2
10.0.0.0-10.255.255.255 External: 3.3.3.3
192.168.160.1-192.168.160.255 External: 3.3.3.3
and so on..
結果が次のようになるように、各行の最後の文字列にグループ化するにはどうすればよいですか?
External: 2.2.2.2
10.100.0.0-10.100.255.255
10.120.0.0-10.255.255.255
External: 3.3.3.3
10.0.0.0-10.255.255.255
192.168.160.1-192.168.160.255
注:IPアドレスを処理する必要はありません。ソートされソートされているので、文字列として扱うことができます。私はxargsのない純粋なBashソリューション(Pythonではない)を探しています。
よろしくお願いします!
ベストアンサー1
変数の最後の外部IPを覚えておいてください。新しいIPが異なる場合は、新しいIPを印刷してください。次に IP 範囲を印刷します。
#! /bin/bash
last_ip=""
while read range _e ip ; do
if [[ $ip != "$last_ip" ]] ; then
printf '\nExternal: %s\n' "$ip"
fi
printf ' %s\n' "$range"
last_ip=$ip
done < "$1"