Фільтр (програма)
Фільтр — це компʼютерна програма чи підпрограма обробки потоку, що створює інший потік. У той час як один фільтр може бути використаний індивідуально, вони часто нанизуються один на одного для формування конвеєра.
Деякі операційні системи як Unix багаті на програми-фільтри. Windows 7 та пізніші версії також багаті на фільтри, оскільки вони містять в собі Windows PowerShell. Для порівняння, однак, кілька фільтрів вбудовано в cmd.exe (оригінальний інтерфейс командного рядка у Windows), більшість з яких мають значні удосконалення в порівнянні з подібними командами фільтрів, що були доступні в MS-DOS. OS X включає фільтри з основної бази Unix, але також має і Automator, який дозволяє фільтрам (відомим тут як «Дії») нанизуватися один на одного для формування конвеєру.
Unix
В Unix і Unix-подібних операційних системах фільтр являє собою програму, яка отримує більшу частину своїх даних із стандартного введення (головний вхідний потік) і пише свої основні результати в стандартне виведення (головний вихідний потік). Додаткове введення може надійти з параметрів командного рядка чи конфігураційних файлів, в той час як додаткове виведення може піти на стандартне виведення помилок. Синтаксис команди для отримання даних з пристрою чи файлу (а не стандартного введення) — це оператор введення (<
). Аналогічно, для надсилання даних на пристрій чи файл (а не на стандартне виведення) — це оператор виведення (>
). Для приєднання рядків даних до вихідного файлу, що вже існує, можна використовувати оператор додавання (>>
). Фільтри можуть нанизуватись один на одного, формуючи конвеєр, за допомогою оператора конвеєру, так званої «труби» («|
»). Цей оператор означає, що основне виведення команди зліва передається як основне введення команді справа.
Філософія Unix закликає обʼєднувати меленькі, дискретні інструменти для виконання більших завдань. Класичним фільтром в Unix є grep Кена Томпсона, який Дуглас Макілрой процитував як «інструмент, що безповоротно вкорінений в світогляд» операційної системи, з пізнішими інструментами, що імітують його.[1] В найпростішому випадку grep виводить всі рядки, що містять рядок символів на свій потік виведення. Нижче наведено приклад:
cut -d : -f 1 /etc/passwd | grep foo
Це знайде всіх зареєстрованих користувачів, які містять «foo» в своєму імені користувача, використовуючи команду cut, щоб взяти перше поле (імʼя користувача) з кожного рядка в системному файлі паролів Unix і передавши це все як ввід для grep, який шукатиме в цьому вводі рядки, що містять рядок символів «foo» і передасть це на вивід.
Загальні програми-фільтри в Unix: cat, cut, grep, head, sort, uniq і tail. Програми на кшталт awk та sed можуть бути використані для створення досить складних фільтрів, тому що вони є повністю програмованими. Фільтри Unix можуть також використовуватися фахівцями, що представляють науку про дані для проведення швидкого огляду файлового набору даних.[2]
DOS
На компʼютерах, що базуються на операційній системі MS-DOS, з ранніх днів двома стандартними фільтрами єfind та sort.
Приклади:
find "ключове_слово" < вхідний_файл > вихідний_файл sort "ключове_слово" < вхідний_файл > вихідний файл find /v "ключове_слово < вхідний_файл | sort > вихідний_файл
Такі фільтри можна використовувати в пакетних файлах (*.bat, *.cmd тощо).
Для використання в тій же самій оболонці операційної системи доступно це багато фільтрів окрім тих, що вбудовані в Windows. Деякі з них є безкоштовними, деякі умовно-безкоштовними, а деякі є комерційними програмами. Багато з них імітують функції і особливості Unix-фільтрів. Деякі програми-фільтри мають графічний інтерфейс (GUI), що дозволяє користувачами створювати індивідуальні фільтри, які підходять для їхньої спеціальної обробки даних та/або добування даних.
Windows
Командний рядок Windows успадкував команди MS-DOS, деякі поліпшив і кілька додав. Наприклад, Windows Server 2003 має шість консольних програм-фільтрів для модифікування Active Directory, які можуть з'єднуватись за допомогою конвеєра: DSAdd, DSGet, DSMod, DSMove, DSRm and DSQuery.[3]
Windows PowerShell додає весь набір фільтрів, відомих як «командлети» які можуть бути зʼєднані між собою через конвеєр, окрім кількох простих, наприклад Clear-Screen
. Наведений приклад отримає список файлів в папці C:\Windows
, отримає розмір кожного і відсортує за розміром в порядку зменшення. Це показує, як три фільтри (Get-ChildItem
, ForEach-Object
та Sort-Object
) зʼєднуються через конвеєр.
Get-ChildItem C:\Windows | ForEach-Object { $_.length } | Sort-Object -Descending
Виноски
- McIlroy, M. D. (1987). (англ.)
- Data Analysis with the Unix Shell Архівовано 22 січня 2016 у Wayback Machine. — Bernd Zuther, comSysto GmbH, 2013(англ.)
- Holme, Dan; Thomas, Orin (2006). Managing And Maintaining a Microsoft Windows Server 2003 Environment (англ.). Microsoft Press. ISBN 978 0735622890.