Удалить строку, если поле дублируется

Ищете awk (или sed) однострочный для удаления строк из вывода, если первое поле является дубликатом.

Пример удаления повторяющихся строк, которые я видел, это:

awk 'a !~ $0; {a=$0}'

Пробовал использовать его для основы без везения (я думал, что изменение $0 до $1 будет делать трюк, но, похоже, не работает).

Ответы

Ответ 1

awk '{ if (a[$1]++ == 0) print $0; }' "[email protected]"

Это стандартное (очень простое) использование для ассоциативных массивов.

Ответ 2

вот как удалить дубликаты

awk '!_[$1]++' file

Ответ 3

Если вы открыты для использования Perl:

perl -ane 'print if ! $a{$F[0]}++' file

-a autosplits строка в массив @F, который индексируется начиная с 0
Хэш %a запоминает, если первое поле уже было замечено


Это смежное решение предполагает, что ваш разделитель полей является запятой, а не пробелом

perl -F, -ane 'print if ! $a{$F[0]}++' file

Ответ 4

он печатает уникальное и одинаковое значение дубликатов

awk '!a[$1]++' file_name