Aqui está awk
solution (suponho que a ordem de saída não seja importante).
awk '!seen[$1]{ seen[$1]=$0; next } $2!=""{ seen[$1]=$0 }
END{ for (x in seen) print seen[x] }' infile
Aqui, definimos uma matriz associada denominada seen
e $1
como índice chave dessa; Por isso, estamos verificando a chave da primeira coluna, que são os IPs que não existem na matriz !seen[$1]
, em seguida, adicionamos a linha inteira $0
ao valor dessa chave e lemos next
line; caso contrário (onde IP já foi visto antes e existe em array) se a próxima linha tiver o mesmo IP e tiver o nome do host, atualize o valor dessa chave com o valor da linha atual.
No final, estamos fazendo o loop da matriz vista com a variável x
como referência aos índices da matriz e imprimimos os valores dessas chaves.