- Яка різниця між awk і sed?
- Які додатки найкраще використовувати для інструментів sed та awk?
Відповіді:
sed
є редактором потоку. Він працює з потоками символів на основі рядка. Він має примітивну мову програмування, яка включає петлі в стилі goto та прості умови (крім узгодження шаблонів та відповідності адрес). По суті є лише дві "змінні": простір шаблону та пробіл. Читання скриптів може бути важким. Математичні операції в кращому випадку незручні.
Існують різні версії sed
з різним рівнем підтримки параметрів командного рядка та мовних функцій.
awk
орієнтована на розмежовані поля на основі рядка. Він має набагато більш надійне програмні конструкції , включаючи if
/ else
, while
, do
/ while
і for
(C-стиль і масив ітерацію). Є повна підтримка змінних та одновимірних асоціативних масивів плюс (IMO) kludgey багатовимірних масивів. Математичні операції нагадують ті, що в C. Він має printf
і функції. "K" в "AWK" означає " K ernighan", як і на "Керніган і Річі" книги "Мова програмування C" (не забувати A ho і W einberger). Можна було б написати детектор академічного плагіату, використовуючи awk
.
GNU awk
( gawk
) має численні розширення, включаючи справжні багатовимірні масиви в останній версії. Існують і інші варіанти awk
включення mawk
і nawk
.
Обидві програми використовують регулярні вирази для вибору та обробки тексту.
Я б схильний використовувати sed
там, де в тексті є візерунки. Наприклад, ви можете замінити всі від'ємні числа в тексті, які знаходяться у формі "знак мінус з наступною послідовністю цифр" (наприклад, "-231,45") формою "дужки бухгалтера" (наприклад, "(231.45)" ) використовуючи це (що має місце для вдосконалення):
sed 's/-\([0-9.]\+\)/(\1)/g' inputfile
Я б використовував, awk
коли текст більше нагадує рядки та стовпці або, як awk
посилається на них, "записи" та "поля". Якби я збирався зробити аналогічну операцію, як описано вище, але лише в третьому полі в простому файлі з комою, я можу зробити щось на кшталт:
awk -F, 'BEGIN {OFS = ","} {gsub("-([0-9.]+)", "(" substr($3, 2) ")", $3); print}' inputfile
Звичайно, це просто дуже прості приклади, які не ілюструють повний спектр можливостей, які кожен може запропонувати.
1) Яка різниця між awk і sed?
Обидва є інструментами, що трансформують текст. АЛЕ awk може робити більше речей, крім простого маніпулювання текстом. Це мова програмування сама по собі з більшістю речей, які ви вивчаєте в програмуванні, наприклад, масиви, петлі, якщо / else управління потоком тощо. Ви також можете "програмувати" в sed, але ви не хочете підтримувати написаний в ньому код .
2) Які додатки найкраще використовувати для інструментів sed та awk?
Висновок: Використовуйте sed для дуже простого розбору тексту. Все, що понад це, awk краще. Насправді, можна взагалі вирвати сед і просто використати awk. Оскільки їх функції перетинаються і awk може зробити більше, просто використовуйте awk. Ви також зменшите криву навчання.
sed
, 's/search/replace'
це простіше набрати, ніж awk
синтаксис 's, і це те, що вам потрібно більшу частину часу.
Обидва інструменти призначені для роботи з текстом, і є завдання, для яких можна використовувати обидва інструменти.
Для мене правилом їх розділення є: Використовуйте sed
для автоматизації завдань, які ви робили б інакше в текстовому редакторі вручну. Ось чому його називають редактором потоку . (Ви можете використовувати ті самі команди, щоб редагувати текст in vim). Використовуйте, awk
якщо ви хочете проаналізувати текст, тобто підрахунок полів, обчислити підсумки, витягнути і реорганізувати структури тощо.
Також не слід забувати про це grep
. Використовуйте, grep
якщо ви хочете лише шукати / витягувати щось у тексті (файлі)