Удалить строку, если поле дублировано - PullRequest
14 голосов
/ 09 апреля 2010

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

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

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

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

Ответы [ 3 ]

26 голосов
/ 09 апреля 2010
awk '{ if (a[$1]++ == 0) print $0; }' "$@"

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

10 голосов
/ 09 апреля 2010

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

awk '!_[$1]++' file
1 голос
/ 15 сентября 2015

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

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

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


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

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