重複したエントリを削除してコンマで置き換えます。

重複したエントリを削除してコンマで置き換えます。

次の順序でIPアドレスとポート番号を含むファイルがあります。

IPアドレス:ポート

1.1.1.1:21
1.1.1.1:22
2.2.2.2:443
3.3.3.3:80
3.3.3.3:443



ポート、ポート形式の結果ipaddressが必要です。

1.1.1.1:21,22
2.2.2.2:443
3.3.3.3:80,443

ベストアンサー1

入力ファイルの行に末尾のスペースがないとします。

$ awk -F ':' 'BEGIN { OFS=FS } $1 in ports { ports[$1] = ports[$1] "," $2; next } { ports[$1] = $2 } END { for (ip in ports) print ip, ports[ip] }' file
3.3.3.3:80,443
1.1.1.1:21,22
2.2.2.2:443

スクリプトawk

BEGIN       { OFS=FS }
$1 in ports { ports[$1] = ports[$1] "," $2; next }
            { ports[$1] = $2 }
END         { for (ip in ports) print ip, ports[ip] }

まず、出力フィールド区切り記号を入力フィールド区切り記号と同じに設定します。これは文字:(コマンドラインで提供されています-F ':')です。次に、現在の最初のフィールド(IPアドレス)がキー配列かどうかをテストしますports。その場合は、ポート番号(2番目のフィールド)を配列エントリにカンマ区切り文字として追加します。そうでない場合、配列のエントリはそのIPアドレスのポート番号に設定されます。

最後に保存されたすべてのIPアドレスが収集されたポート番号で印刷されます。

おすすめ記事