Вопрос

  • В чем разница между Awk и SED?
  • Какое приложение лучше всего использовать для инструментов SED и AWK?
Это было полезно?

Решение

sed это потоковый редактор.Он работает с потоками символов построчно.Он имеет примитивный язык программирования, который включает в себя циклы в стиле goto и простые условные выражения (в дополнение к сопоставлению шаблонов и сопоставлению адресов).По сути, есть только две «переменные»:пространство шаблона и пространство удержания.Читабельность сценариев может быть затруднена.Математические операции в лучшем случае чрезвычайно неудобны.

Существуют различные версии sed с различными уровнями поддержки параметров командной строки и языковых функций.

awk ориентирован на поля с разделителями построчно.Он имеет гораздо более надежные программные конструкции, включая if/else, while, do/while и for (Стиль C и итерация массива).Имеется полная поддержка переменных и одномерных ассоциативных массивов, а также (IMO) сложных многомерных массивов.Математические операции напоминают операции в C.В нем есть printf и функции.Буква «К» в слове «AWK» означает «Кernighan», как в «Кернигане и Ритчи» из книги «Язык программирования C», известность (не забыть Ахо и ВтЭйнбергер).Можно было бы написать детектор академического плагиата, используя awk.

ГНУ 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 может делать больше, чем просто манипулировать текстом.Это сам по себе язык программирования, содержащий большинство вещей, которые вы изучаете в программировании, такие как массивы, циклы, управление потоком if/else и т. д. Вы также можете «программировать» в sed, но вы не захотите поддерживать код, написанный на нем. .

2) В каких приложениях лучше всего использовать инструменты sed и awk?

Заключение:Используйте sed для очень простого анализа текста.Все, что сверх этого, awk лучше.Фактически, вы можете вообще отказаться от sed и просто использовать awk.Поскольку их функции перекрываются и awk может делать больше, просто используйте awk.Вы также сократите время обучения.

Оба инструмента предназначены для работы с текстом, и есть задачи, для которых оба инструмента можно использовать.

Для меня правило их разделения таково:Использовать sed для автоматизации задач, которые в противном случае вы бы выполняли в текстовом редакторе вручную.Вот почему это называется потоком редактор.(Вы можете использовать те же команды для редактирования текста в vim).Использовать awk если вы хотите анализировать текст, то есть подсчитывать поля, подсчитывать итоги, извлекать и реорганизовывать структуры и т. д.

Также не следует забывать о grep.Использовать grep если вы хотите только найти/извлечь что-то в тексте (файле)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top