Печать уникальных строк

Есть ли лучшее решение для печати уникальных строк, отличных от комбинации sort и uniq ?

  • Как я могу манипулировать содержимым файла, дублируя и меняя некоторые части?
  • Как заменить все вкладки в каждом файле в ветке файловой системы на 2 пробела?
  • sed удалять пространство
  • Шаблоны значений для сценария bash для файлов apache conf
  • Как сравнить строки в двух файлах
  • Каким образом можно извлечь сегмент из текстового файла?
  • Манипулирование файлами; Вставляйте «;» каждый 12, 44 и 60-й символы в каждую строку текстового файла
  • Извлечь строку, если первое поле содержит точку
  • 4 Solutions collect form web for “Печать уникальных строк”

    Чтобы напечатать каждую идентичную строку только в одном порядке:

     sort -u 

    Чтобы напечатать только уникальные строки в любом порядке:

     sort | uniq -u 

    Чтобы печатать каждую идентичную строку только один раз, в порядке их первого появления: (для каждой строки печатайте строку, если она еще не была видна, затем в любом случае увеличивайте видимый счетчик)

     awk '!seen[$0] {print} {++seen[$0]}' 

    Чтобы напечатать только уникальные строки в порядке их первого появления: (запишите каждую строку в seen , а также в lines если это первое вхождение; в конце ввода напечатайте строки в порядке их появления, но только те, видно только один раз)

     awk '!seen[$0]++ {lines[i++]=$0} END {for (i in lines) if (seen[lines[i]]==1) print lines[i]}' 

    Некоторые (большинство?) Версий sort имеют флаг -u , который напрямую выполняет часть uniq . Могут быть некоторые ограничения длины строки в зависимости от реализации, но у вас были те, которые уже имеют простой sort|uniq .

    Работает ли Perl для вас? Он может сохранять строки в исходном порядке, даже если дубликаты не смежны. Вы также можете закодировать его в Python или awk .

     while (<>) { print if $lines{$_}++ == 0; } 

    Который может быть сокращен до

     perl -ne 'print unless $lines{$_}++;' 

    Данный входной файл:

     abc def abc ghi abc def abc ghi jkl 

    Он дает выход:

     abc def ghi jkl 

    Для последней части ответа, упомянутого в: Печать уникальных строк @Gilles в качестве ответа на этот вопрос, я попытался устранить необходимость использования двух хэшей.

    Это решение предназначено для: печатать только уникальные строки в порядке их первого появления:

    awk '{counter[$0]++} END {for (line in counter) if (counter[line]==1) print line}'

    Здесь «counter» хранит подсчет каждой строки, которая аналогична предыдущей.
    В конце мы печатаем только те строки, у которых значение счетчика равно 1.

    Linux и Unix - лучшая ОС в мире.