Вот один способ с awk
:
awk 'NR==FNR{if (x[$1]++){if ($2!=t){z[$1]++}} else {t=$2};
next}!($1 in z)' infile infile
Этот файл обрабатывается дважды - на первом проходе проверяется наличие разных значений второго поле, когда 1-е поле имеет то же значение - если это так, он использует $ 1
в качестве индекса массива, тогда на 2-м проходе он печатает, только если 1-е поле не является индексом массива.
Или, если вы не против использовать sort
с awk
:
sort -u infile | awk 'NR==FNR{seen[$1]++;next}seen[$1]==1' - infile
sort -u
удаляет повторяющиеся строки из файла и передает результат в awk
, который считает появление 1-го поля, а затем обрабатывает весь файл, снова печатая строки, если счетчик равен 1
.