Как я могу найти недавно найденную строку в непрерывном канале?

Предположим, что у Вас есть команда mycmd это отправляет непрерывный поток в канале.

Вы хотите распечатать только каждого недавно происшествия.

Как Вы сделали бы это?

Команда

mycmd | sort -u

не допустимо, так как я должен ожидать, пока mycmd не закончился.

Очевидно возможно работать с файлами, но я уверен, что может быть более прямой путь.

1
задан 27 September 2016 в 10:02

1 ответ

sort ничего не показал бы, потому что sort не может работать над потоками данных, прибывающими в STDIN, который не имеет никакого EOF (Конец Файла).

sort будет только работать если mycmd концы в какой-то момент, затем sort будет видеть EOF и работать над содержанием.


Для получения уникального содержания (содержания) на потоке данных можно использовать awk с массивом для хранения количеств записей:

mycmd | awk '!seen[$0]++'

seen[$0] проверки, если строка замечена в массиве seen путем получения это - значение. Если строка не присутствует seen[$0] возвратился бы 0 (ложь), затем отрицание (!) тест становится верным, и строка печатается (действие по умолчанию). ++ увеличивает значение 1, в поэтому следующий раз, когда тест отрицания был бы ложью для любой дублирующейся строки.

1
ответ дан 7 December 2019 в 15:48

Другие вопросы по тегам:

Похожие вопросы: