Фильтр — это компьютерная программа или подпрограмма для обработки потока , производящая другой поток. Хотя один фильтр может использоваться индивидуально, их часто объединяют вместе, образуя конвейер .
Некоторые операционные системы, такие как Unix, богаты программами-фильтрами. Windows 7 и более поздние версии также богаты фильтрами, поскольку включают Windows PowerShell . Однако для сравнения, в cmd.exe (исходный интерфейс командной строки Windows) встроено немного фильтров , большинство из которых имеют значительные улучшения по сравнению с аналогичными командами фильтров, которые были доступны в MS-DOS . OS X включает фильтры из своей базовой базы Unix, но также имеет Automator , который позволяет объединять фильтры (известные как «Действия») в конвейер.
В Unix и Unix-подобных операционных системах фильтр — это программа, которая получает большую часть своих данных из своего стандартного ввода (основного потока ввода) и записывает свои основные результаты в свой стандартный вывод (основной поток вывода). Вспомогательный ввод может поступать из флагов командной строки или файлов конфигурации, в то время как вспомогательный вывод может направляться в стандартную ошибку . Синтаксис команды для получения данных с устройства или файла, отличного от стандартного ввода, — это оператор ввода ( <
). Аналогично, для отправки данных на устройство или в файл, отличного от стандартного вывода >
, — это оператор вывода ( ). Для добавления строк данных в существующий файл вывода можно использовать оператор добавления ( >>
). Фильтры можно объединять в конвейер с помощью оператора конвейера (" |
"). Этот оператор означает, что основной вывод команды слева передается как основной ввод команде справа.
Философия Unix поощряет объединение небольших, дискретных инструментов для выполнения более крупных задач. Классический фильтр в Unix — это grep Кена Томпсона , который Дуг Макилрой называет тем, что «безвозвратно укоренило внешний вид инструментов» в операционной системе, а более поздние инструменты его имитируют. [1] grep в простейшем случае выводит на свой вывод любые строки, содержащие строку символов. Ниже приведен пример:
вырезать -d : -f 1 /etc/passwd | grep foo
Это позволяет найти всех зарегистрированных пользователей, в имени которых есть « foo », используя команду cut для извлечения первого поля (имени пользователя) каждой строки файла паролей системы Unix и передачи их всех в качестве входных данных в grep, которая ищет во входных данных строки, содержащие строку символов «foo», и выводит их на печать.
Распространенные программы фильтров Unix: cat , cut , grep , head , sort , tail и uniq . Такие программы, как awk и sed, можно использовать для создания довольно сложных фильтров, поскольку они полностью программируемы. Фильтры Unix также могут использоваться специалистами по данным для быстрого обзора набора данных на основе файлов. [2]
Два стандартных фильтра с первых дней работы компьютеров на базе DOS — это find и sort .
Примеры:
найти "ключевое слово" < имя_входного_файла > имя_выходного_файла сортировать "ключевое слово" < имя_входного_файла > имя_выходного_файла найти /v "ключевое слово" < имя_входного_файла | сортировать > имя_выходного_файла
Такие фильтры могут использоваться в пакетных файлах (*.bat, *.cmd и т.д.).
Для использования в той же среде командной оболочки доступно гораздо больше фильтров, чем встроенных в Windows. Некоторые из них являются бесплатными , некоторые условно-бесплатными , а некоторые — коммерческими программами. Некоторые из них имитируют функции и особенности фильтров в Unix. Некоторые программы фильтрации имеют графический пользовательский интерфейс (GUI), позволяющий пользователям разрабатывать настраиваемые фильтры в соответствии со своими особыми требованиями к обработке данных и/или интеллектуальному анализу данных .
Windows Command Prompt унаследовала команды MS-DOS, улучшила некоторые и добавила несколько. Например, Windows Server 2003 имеет шесть фильтров командной строки для изменения Active Directory , которые можно объединить в цепочку с помощью конвейера: DSAdd, DSGet, DSMod, DSMove, DSRm и DSQuery. [3]
Windows PowerShell добавляет целый набор фильтров, известных как «командлеты», которые можно связать вместе с помощью конвейера, за исключением нескольких простых, например Clear-Screen
. Следующий пример получает список файлов в C:\Windows
папке, получает размер каждого и сортирует размер в порядке возрастания. Он показывает, как три фильтра ( Get-ChildItem
, ForEach-Object
и Sort-Object
) связаны с помощью конвейеров.
Get-ChildItem C :\ Windows | ForEach -Object { $_ . length } | Сортировка-Object -Ascending