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

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

  • Как вы извлекаете целое слово, содержащее подстроку?
  • Удалить определенные номера строк (переданные как переменные) из файла в linux
  • BASH получает значение из строки
  • Шаблоны значений для сценария bash для файлов apache conf
  • Объединение строк текста с повторным началом
  • Получить номера строк для пустых строк
  • Как заменить все вкладки в каждом файле в ветке файловой системы на 2 пробела?
  • Поиск строк в файлах и представление четырех строк контекста (совпадение и три следующих)
  • 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.

    Interesting Posts

    Некоторые команды терпят неудачу, когда активный дисплей / vt отличается от того, где они запущены. Как исправить / обходным путем?

    Как включить двоеточие в конкретную запись команды sudoers?

    Определите тип интерфейса / режим мониторинга с помощью «/ sys / class / net»

    Есть ли способ перенаправить все команды через сценарий оболочки вместо прямого запуска?

    Быть root без запроса пароля в сценарии оболочки

    Как пользователь, не являющийся пользователем, я могу удалить файл, созданный root, с разрешениями 0444?

    Как я могу идти вперед в файле? Что такое oposite ctrl + O

    Использование xfreerdp с переменной IP / hostname

    Прикрепление документов LibreOffice Writer

    Intel® Wireless 7265D: iw показывает неправильную нормативную информацию

    почему мне нужно исправить ядро ​​linux, чтобы использовать spandband pandaboard?

    pacman / yaourt / Arch Linux: как получить краткое изложение CLI устаревших пакетов

    В Bash, если и если то же самое?

    как создать другой физический том / раздел с существующим неиспользуемым пространством lvm без потери данных?

    Разделение USB на необработанный раздел

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