各行の最後の文字列に基づいてリストをグループ化します。

各行の最後の文字列に基づいてリストをグループ化します。

次の文字列のリスト(並べ替えられた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"

おすすめ記事