#!/bin/bash while getopts "g:n:h" ARG; do case "${ARG}" in g) parse="gnmap" file="${OPTARG}" ;; n) parse="nmap" file="${OPTARG}" ;; esac done if ! test "${parse}" || ! test "${file}"; then printf "%s\n" "usage: $(basename $0) -g | -n " exit 1 fi if ! test -f "${file}"; then printf "%s\n" "${file} is not a file, exiting" exit 1 fi case "${parse}" in gnmap) cat $file | awk '/Host:/ { ip = $2 } /\/open\/tcp\// { for (i = 1; i <= NF; i++) { if ($i ~ /^[0-9]+\/open\/tcp\//) { print ip "|" $i } } } ' | sed 's/\/\+/\//g' | awk -F '/' '{print $1"|"$4}' ;; nmap) cat $file | grep -v ^\# | awk -F'[ /]+' ' /Nmap scan report for/ { host = $5 } /^[0-9]+\// { version = "" for (i = 5; i <= NF; i++) { version = version $i " " } printf("%s|%s|%s|%s\n", host, $1, $4, version) } ' ;; esac