Tenho uma lista parecida com a seguinte:
192.168.2.1 sometext.com
192.168.2.1
192.168.2.3
192.156.1.6
192.156.1.6 moretext.com
192.123.1.1
192.564.7.3
192.564.7.3 hello.com
Saída que eu preciso:
192.168.2.1 sometext.com
192.168.2.3
192.156.1.6 moretext.com
192.123.1.1
192.564.7.3 hello.com
Desejo remover IPs que não possuem um nome de host somente se eles já tiverem uma linha que inclua um nome de host.
Veja acima, por exemplo.
Isso é possível fazer?
Aqui está
awk
a solução (presumo que a ordem de saída não importa).Aqui definimos um array associado nomeado
seen
e$1
como índice chave disso; portanto, estamos verificando a chave da primeira coluna que são IPs que não existem na matriz e, em!seen[$1]
seguida, adicionamos uma linha inteira$0
ao valor dessa chave e lemos anext
linha; caso contrário (onde o IP já foi visto antes e existe na matriz) 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 END, estamos percorrendo o array visto com a variável
x
como referência para os índices do array e imprimimos os valores dessas chaves.