Classificando uma lista por coluna

1

Eu tenho uma lista semelhante à 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 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

Eu quero remover IPs que não tenham 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?

    
por Proletariat 24.05.2018 / 14:05

1 resposta

1

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.

    
por 24.05.2018 / 14:23