次のウェブログファイルがあります。
Nmap scan report for 192.168.1.51
Host is up.
PORT STATE SERVICE
80/tcp open http
443/tcp open https
8080/tcp open http-proxy
443/tcp open https
8080/tcp open http-proxy
8082/tcp filtered redcap
8083/tcp filtered https-alt
Nmap scan report for 192.168.1.201
Host is up.
PORT STATE SERVICE
80/tcp open http
443/tcp filtered https
8281/tcp filtered http-proxy
8080/tcp open sedan
8801/tcp filtered https-alt
Nmap scan report for 192.168.1.17
Host is up.
PORT STATE SERVICE
80/tcp closed http
443/tcp closed https
9081/tcp open ecan
Nmap scan report for 192.168.1.10
Host is up.
PORT STATE SERVICE
80/tcp closed ftp
443/tcp open https
9081/tcp open standard
IPアドレスとIPアドレスごとに開いているポート数を抽出したいので、結果は次のようになります。
192.168.1.10 - 2
192.168.1.201 - 2
192.168.1.51 - 5
192.168.1.17 - 1
ベストアンサー1
awk
解決策:
awk 'BEGIN{RS=""; FS="\n"}
{split($1,a," "); host[a[5]] = 0; for (i=1; i<=NF; i++) if (match($i,"open") != 0)
host[a[5]]++} END{for (each in host) print each " - " host[each]}' file
192.168.1.10 - 2
192.168.1.201 - 2
192.168.1.51 - 5
192.168.1.17 - 1
このコマンドでは、レコード区切り文字はRS
空行に設定され、“”
フィールド区切り文字は改行文字に設定されます\n
。次に、awk
各レコードの最初の行を分割し、IPアドレスに関連付けられた分割配列の5番目のエントリをキャプチャします。次に、Awk
残りのフィールドを繰り返して、NF
各フィールドで「open」文字列を見つけます。存在する場合は、open
ホストアレイの関連付けられたIPアドレスに対して計算されます。最後にawk
結果を印刷します。