- В чем разница между awk и sed?
- Какое приложение лучше всего подходит случаи для sed и awk-инструментов?
В чем разница между sed и awk?
Ответ 1
sed
- редактор потока. Он работает с потоками символов на основе строки. Он имеет примитивный язык программирования, который включает в себя циклы стиля goto и простые условные обозначения (в дополнение к сопоставлению шаблонов и сопоставлению адресов). Существуют, по существу, только две "переменные": пространство шаблонов и пространство удержания. Чтение скриптов может быть затруднено. Математические операции в лучшем случае необычайно неудобны.
Существуют различные версии sed
с различными уровнями поддержки параметров командной строки и языковых функций.
awk
ориентирован на разделенные поля на основе строки. Он имеет гораздо более надежные конструкторы программирования, включая if
/else
, while
, do
/while
и for
(итерация типа C и массив). Существует полная поддержка переменных и одномерных ассоциативных массивов плюс (IMO) kludgey многомерных массивов. Математические операции похожи на те, что указаны в C. Он имеет printf
и функции. "K" в "AWK" означает " K ernighan", как в "Kernighan and Ritchie" книги "C Programming Language" (не забыть 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
Конечно, это просто очень простые примеры, которые не иллюстрируют весь спектр возможностей, которые каждый может предложить.
Ответ 2
1) В чем разница между awk и sed?
Оба являются инструментами, которые преобразуют текст. НО awk может делать больше вещей, кроме простого манипулирования текстом. Его язык программирования сам по себе с большинством вещей, которые вы изучаете в программировании, например, массивы, циклы, if/else управления потоком и т.д. Вы можете "программировать" и в sed, но вы не захотите поддерживать написанный в нем код.
2) Какое приложение лучше всего подходит для sed и awk-инструментов?
Заключение: используйте sed для очень простого разбора текста. Все, кроме этого, awk лучше. На самом деле, вы можете полностью отключить sed и просто использовать awk. Поскольку их функции перекрываются, а awk может делать больше, просто используйте awk. Вы также уменьшите свою кривую обучения.
Ответ 3
Оба инструмента предназначены для работы с текстом, и есть задачи, для которых могут использоваться оба инструмента.
Для меня правило их разделения: Используйте sed
для автоматизации задач, которые вы могли бы сделать иначе в текстовом редакторе вручную. Вот почему он называется редактором потока. (Вы можете использовать те же команды для редактирования текста в vim). Используйте awk
, если вы хотите проанализировать текст, что означает подсчет полей, вычисление итогов, извлечение и реорганизация структур и т.д.
Также не стоит забывать о grep
. Используйте grep
, если вы хотите только искать/извлекать что-то в тексте (файле)