Este programa awk
deve fazê-lo:
$ echo "Host: 10.0.0.101 ()Ports: 21/closed/tcp//ftp///, 22/closed/tcp//ssh///, 23/closed/tcp//telnet///, 25/closed/tcp//smtp///, 53/closed/tcp//domain///, 110/closed/tcp//pop3///, 139/open/tcp//netbios-ssn///, 143/closed/tcp//imap///, 445/open/tcp//microsoft-ds///, 3389/closed/tcp//ms-wbt-server///" |
awk '{printf "%s\t", $2;
for (i=4;i<=NF;i++) {
split($i,a,"/");
if (a[2]=="open") printf ",%s",a[1];}
print ""}' |
sed -e 's/,//'
10.0.0.101 139,445
Antes de você editar sua pergunta, eu supus, sua saída seria do shell nmap
, então eu preparei esta resposta:
$ nmap -sT 127.0.0.1-3 |
awk '/^Nmap scan report/{cHost=$5;}
/open/ { split($1,a,"/"); result[cHost][a[1]]=""}
END {
for (i in result) {
printf i;
for (j in result[i])
printf ",%s", j ;
print ""} }' |
sed -e 's/,/\t/'
localhost 445,25,139,631,22,80
127.0.0.2 445,139,22,80
127.0.0.3 445,139,22,80
Se você precisar de explicações para eles, deixe um comentário. Se você puder ajudar a eliminar as chamadas sed seguidas ou melhorar qualquer uma das invocações, edite.