Ответ 1
awk '{ if (a[$1]++ == 0) print $0; }' "[email protected]"
Это стандартное (очень простое) использование для ассоциативных массивов.
Ищете awk (или sed) однострочный для удаления строк из вывода, если первое поле является дубликатом.
Пример удаления повторяющихся строк, которые я видел, это:
awk 'a !~ $0; {a=$0}'
Пробовал использовать его для основы без везения (я думал, что изменение $0 до $1 будет делать трюк, но, похоже, не работает).
awk '{ if (a[$1]++ == 0) print $0; }' "[email protected]"
Это стандартное (очень простое) использование для ассоциативных массивов.
вот как удалить дубликаты
awk '!_[$1]++' file
Если вы открыты для использования Perl:
perl -ane 'print if ! $a{$F[0]}++' file
-a
autosplits строка в массив @F
, который индексируется начиная с 0
Хэш %a
запоминает, если первое поле уже было замечено
Это смежное решение предполагает, что ваш разделитель полей является запятой, а не пробелом
perl -F, -ane 'print if ! $a{$F[0]}++' file
он печатает уникальное и одинаковое значение дубликатов
awk '!a[$1]++' file_name