Предположим, что у Вас есть команда mycmd
это отправляет непрерывный поток в канале.
Вы хотите распечатать только каждого недавно происшествия.
Как Вы сделали бы это?
Команда
mycmd | sort -u
не допустимо, так как я должен ожидать, пока mycmd не закончился.
Очевидно возможно работать с файлами, но я уверен, что может быть более прямой путь.
sort
ничего не показал бы, потому что sort
не может работать над потоками данных, прибывающими в STDIN, который не имеет никакого EOF (Конец Файла).
sort
будет только работать если mycmd
концы в какой-то момент, затем sort
будет видеть EOF и работать над содержанием.
Для получения уникального содержания (содержания) на потоке данных можно использовать awk
с массивом для хранения количеств записей:
mycmd | awk '!seen[$0]++'
seen[$0]
проверки, если строка замечена в массиве seen
путем получения это - значение. Если строка не присутствует seen[$0]
возвратился бы 0
(ложь), затем отрицание (!
) тест становится верным, и строка печатается (действие по умолчанию). ++
увеличивает значение 1, в поэтому следующий раз, когда тест отрицания был бы ложью для любой дублирующейся строки.