Aqui está uma maneira com awk
:
awk 'NR==FNR{if (x[$1]++){if ($2!=t){z[$1]++}} else {t=$2};
next}!($1 in z)' infile infile
Este processo o arquivo duas vezes - 1ª passagem verifica se existem valores diferentes do 2º campo quando o 1º campo é o mesmo valor - se assim for usa $1
como um índice de array então na 2ª passagem ele imprime somente se 1º campo não é um índice da matriz.
Ou, se você não se importa em usar sort
com awk
:
sort -u infile | awk 'NR==FNR{seen[$1]++;next}seen[$1]==1' - infile
sort -u
remove as linhas duplicadas do arquivo e canaliza o resultado para awk
, que conta as ocorrências do primeiro campo, e processa o arquivo inteiro novamente, imprimindo as linhas se a contagem for 1
.