次のようなリストがあります。
192.168.2.1 sometext.com
192.168.2.1
192.168.2.3
192.156.1.6
192.156.1.6 moretext.com
192.123.1.1
192.564.7.3
192.564.7.3 hello.com
必要な出力は次のとおりです。
192.168.2.1 sometext.com
192.168.2.3
192.156.1.6 moretext.com
192.123.1.1
192.564.7.3 hello.com
ホスト名のないIPを削除したいです。〜しない限りホスト名を含む行が既に存在します。
上記の例をご覧ください。
大丈夫ですか?
答え1
awk
解決策は次のとおりです(出力順序は重要ではないと仮定します)。
awk '!seen[$1]{ seen[$1]=$0; next } $2!=""{ seen[$1]=$0 }
END{ for (x in seen) print seen[x] }' infile
seen
ここでは、キーインデックスと呼ばれる連想配列を定義します$1
。したがって、配列にないIPである最初の列のキーを確認し、そのキー値に行!seen[$1]
全体を追加して読み取ります。そうでない場合(IPは以前に解決され、配列に存在します)、次の行に同じIPがあり、ホスト名がある場合は、そのキーの値を現在の行の値に更新します。$0
next
最後に、x
配列インデックスで処理される変数を使用して配列を繰り返し、そのキーの値を印刷します。