Потокові редактори SED та AWK
sed: не інтерактивний редактор текстових файлів
awk: мова обробки шаблонів з C-подібним синтаксисом
При всіх своїх відмінностях, ці дві утиліти володіють схожим синтаксисом, вони обидві вміють працювати з регулярними виразами, обидві, по-замовчуванню, читають дані з пристрою stdin і обидві виводять результат обробки на пристрій stdout. Обидві є утилітами UNIX-систем, і чудово можуть взаємодіяти між собою. Висновок від однієї може бути перенаправлений, по конвеєру, на вхід іншої. Їх комбінування надає сценаріями, мовою командної оболонки, міць і гнучкість мови Perl. Одна важлива відмінність полягає в тому, що у випадку з sed, сценарій легко може передавати додаткові аргументи цієї утиліті, в той час, як у випадку з awk це складніше завдання.
Sed - це не інтерактивний рядковий редактор. Він приймає текст або з пристрою stdin, або з текстового файлу, виконує деякі операції над рядками і потім виводить результат на пристрій stdout або у файл. Як правило, в сценаріях, sed використовується в конвеєрній обробці даних, спільно з іншими командами і утилітами. Sed визначає, по заданому адресного простору, над якими рядками слід виконати операції. Адресний простір рядків задається або їх порядковими номерами, яким шаблоном. Наприклад, команда 3d змусить sed видалити третій рядок, а команда / windows / d означає, що всі рядки, що містять "windows", повинні бути вилучені. З усього розмаїття операцій, ми зупинимося на трьох, використовуваних найбільш часто. Це p - друк (на stdout), d - видалення і s - заміна.
Awk - це повноцінна мова обробки текстової інформації з синтаксисом, що нагадує синтаксис мови C. Він володіє досить широким набором можливостей, проте, ми розглянемо лише деякі з них - найбільш вживані в сценаріях командної оболонки. Awk "розбиває" кожен рядок на окремі поля. По-замовчуванню, поля - це послідовності символів, відокремлені один від одного пробілами, однак є можливість призначення інших символів, як роздільник полів. Awk аналізує і обробляє кожне поле окремо. Це робить його ідеальним інструментом для роботи зі структурованими текстовими файлами, особливо з таблицями. Усередині сценаріїв командної оболонки, код awk, полягає в "суворі" (одиночні) лапки і фігурні дужки.
awk '{print $ 3}' $ filename
- Виводить вміст 3-го поля з файлу $ filename на пристрій stdout.
awk '{print $ 1 $ 5 $ 6}' $ filename
- Виводить вміст 1-го, 5-го і 6-го полів з файлу $ filename.
Тільки що, ми розглянули дію команди print. Ще, на чому ми зупинимося - це змінні. Awk працює зі змінними подібно сценаріями командної оболонки, але більш гнучко. {Total + = $ {column_number}} Ця команда додасть вміст змінної column_number до змінної "total". Щоб, на завершення вивести "total", можна використовувати команду END, яка відкриває блок коду, відробляє після того, як будуть опрацьовані всі вхідні дані. END {print total}
Команді END, відповідає команда BEGIN, яка відкриває блок коду, відробляє перед початком обробки вхідних даних.