次の順序で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アドレスが収集されたポート番号で印刷されます。