awk
solution:
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
Nesse comando, o separador de registro RS
foi definido para uma linha em branco “”
e o separador de campo para uma nova linha \n
. Em seguida, awk
divide a primeira linha de cada registro e captura o quinto item da matriz de divisão que é relevante para o endereço IP. Depois disso, Awk
itera pelos campos restantes NF
procurando a sequência "aberta" em cada campo. Quando open
estiver presente, ele contará para o endereço IP relevante na matriz de host. Finalmente, awk
imprime os resultados.