В терминологии Unix фильтр - это то, что получает строки текста откуда-то, модифицирует их одну за другой и выводит их.В этом контексте «изменить» также может означать «съесть / выбросить».
Обычно вы используете фильтр, наполняя его данными;например:
cat access.log | userfilter fred
запустит две команды: «cat access.log» берет файл (access.log) и отправляет его.Команда «userfilter fred» запускает второй процесс, который принимает строки текста, но выводит только те, которые соответствуют критериям user = fred.Волшебство совершается символом канала |, который запускает две команды и соединяет выход первого с входом второго.
«кот», если не сказано иначе, выводит данные на консоль (хорошодействительно есть "стандартный вывод").«userfilter» не отличается - если не сказать иначе, отправляет данные в стандартный вывод.На самом деле все эти команды («фильтры») будут всегда отправлять данные на стандартный вывод (это unix-способ): это оболочка, которая манипулирует каналами и соединяет их.Но я хотел добавить «если не сказано по-другому», потому что есть команды, которым можно сказать, что они ведут себя по-разному.
Теперь вы можете взять вывод последней команды и отправить его куда-нибудь еще, угадайте, как?Добавляя все больше и больше каналов "|".
Я полагаю, вы бы запустили свою командную строку следующим образом:
cat access.log | userfilter winston | roomfilter 101
В приведенной выше команде все все строки из access.log идутчерез пользовательский фильтр, который выводит только те, в которых есть пользователь winston.В свою очередь, эти результирующие строки идут в roomfilter, который выводит только те, в которых есть комната 101. В результате получается, что вся активность winston в комнате 101 выводится.
Я оставляю вам последний шаг фильтра, но я будупомочь вам в подсчете результатов.
Предположим, что вас больше не интересуют конечные (релевантные) строки журнала, но при подсчете их в Unix есть хороший "стандартный" фильтр, который делает именно это: count (он может считать строки, символы, слова).Его зовут "wc" или, говоря обычным языком Unix, wc(1)
.Это «1» означает, что это обычная команда, и вы можете прочитать объяснения (руководство) об этом с помощью команды man wc
.Хорошо, не правда ли?Кроме того, wc не означает уборную - это означает «подсчет слов».
Чтобы подсчитать, сколько строк текста представлено в нем, правильный синтаксис - «wc -l».Таким образом, вы можете подсчитать, сколько строк в файле access.log, используя эту команду:
cat access.log | wc -l
Если вы хотите подсчитать, сколько раз Winston что-то делал, вы используете:
cat access.log | userfilter winston | wc -l
Я не дал вам полный ответ, просто несколько кирпичиков, чтобы построить его самостоятельно;Надеюсь, этого достаточно - удачи!