「10.1.1.1-10.1.1.3」形式を「10.1.1.1-3」に変換

「10.1.1.1-10.1.1.3」形式を「10.1.1.1-3」に変換

おそらく、私はこれが可能であることを知っていますが、awk今は解決策を思い出していません。

IP形式を変換する方法

10.1.1.1-10.1.1.3
10.100.100.11-10.100.100.31

到着

10.1.1.1-3
10.100.100.11-31

ここに私の試みがありますが、cut実際に期待どおりに動作しません。

wolf@linux:~$ echo 10.1.1.1-10.1.1.3 | cut -d . -f 1,2,3,4
10.1.1.1-10
wolf@linux:~$ 

wolf@linux:~$ echo 10.100.100.11-10.100.100.31 | cut -d . -f 1,2,3,4
10.100.100.11-10
wolf@linux:~$ 

ベストアンサー1

以下は、共通のコンポーネント数に合わせて調整されたAWKを使用する一般的なソリューションです。

BEGIN {
    FS = "-"
}

NF == 2 {
    split($1, start, /\./)
    split($2, end, /\./)
    printf $1
    for (i = 1; i <= length(start); i++) {
        if (start[i] != end[i]) {
            for (j = i; j <= length(end); j++)
                printf "%s%s", (j > i ? "." : "-"), end[j]
            print ""
            next
        }
    }
    print ""
}

これも同様の状況を処理して1.2.3.4-1.2.5.6正しい範囲を印刷します。

1.2.3.4-5.6

おすすめ記事