Что может сделать awk, что sed не может? - PullRequest
5 голосов
/ 30 августа 2009

Я использовал sed для пакетного ptovess, где я не мог сделать это с помощью awk. Мог ли это сделать awk? Или это больше вопрос выбора и вызова awk и sed, эквивалентного для использования. Они оба выполняют общий поиск, заменяя аналогичные вводом / выводом. Есть хороший пример того, что нельзя сделать с тем, что может сделать другой?

Ответы [ 5 ]

9 голосов
/ 30 августа 2009

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

7 голосов
/ 30 августа 2009

в оригинале (и все же лучший) книга, Язык программирования AWK , реализовано следующее (среди прочего):

  • простой ассемблер
  • компилятор рекурсивного спуска
  • программа индексирования текста

Попробуйте сделать это с помощью sed.

3 голосов
/ 30 августа 2009

Единственное, о чем я могу думать, это то, что sed может вносить небольшие изменения за меньшее количество символов в awk. Так что для быстрой настройки живой оболочки быстрее набирать текст.

2 голосов
/ 30 августа 2009

G'day,

Awk более мощный. sed обычно более ограничен в своих возможностях.

Sed хорош для линейных изменений данных. У него есть несколько простых циклических конструкций, обычные элементы ed / ex / vi и регулярные выражения, подстановочные выражения, составные операторы, решения и т. Д. Большинство людей используют его для изменения данных по конвейеру.

Awk хорош для фильтрации или перестановки данных. В основном используется для отчетности.

Я бы посоветовал взглянуть на прекрасную книгу Дейла Догерти "sed & awk" ( продезинфицированная ссылка на Amazon ). Кстати, там также есть одно из лучших объяснений регулярных выражений.

Многие люди скажут, что в любом случае используйте Perl! (-:

Редактировать: Забыл сказать, что язык awk очень похож на C, что неудивительно, если учесть, что «k» в awk обозначает Брайана Кернигана. Да. Это Брайан Керниган!

Кроме того, sed работает только с потоками данных, тогда как awk работает как с потоками данных, так и с файлами.

НТН

ура, Sed работает только с потоками данных, тогда как awk работает как с потоками данных, так и с файлами.

2 голосов
/ 30 августа 2009

SED является потоковым редактором, и поэтому не имеет переменных и некоторых других конструкций, таких как AWK. AWK - это полноценный язык.

...