Стоит ли учить Awk?

Я неплохо разбираюсь в bash-скриптинге, и мне нравятся регулярные выражения, и я немного использую sed. Стоит ли изучать awk со всеми альтернативами? Мнения?

5 ответов

Существуют различные альтернативы не потому, что каждый может делать то же самое, что и другие (хотя это верно для локализованных случаев или для полноценных языков программирования, таких как Perl), а скорее потому, что они могут делать разные вещи.

sed не очень подходит для обработки табличных данных, и использование чистого bash для этого обычно более болезненно, чем хотелось бы. awk почти тривиально работает с табличными данными, а также может использоваться для написания маленьких конечных автоматов. Потратьте некоторое время на изучение различных решений awk в Stack Overflow, чтобы узнать, что он может делать.

Я использую awk все время и стараюсь не писать и не использовать perl. Perl хотел сделать слишком много и стал языком общего назначения, но, к сожалению, имеет ужасный и нечитаемый синтаксис, ИМХО. Поддерживать Perl-скрипты, которые были написаны кем-то другим, - это боль, и через некоторое время это, как правило, верно и для наших собственных скриптов.

С другой стороны, awk имеет ограниченную, но целенаправленную область применения и хорошо с ней работает. Он сравнительно хорошо взаимодействует со сценариями оболочки, в отличие от Perl.

Что касается выживания bash, я предпочитаю ksh93, если вы спросите меня.

Я бы вряд ли назвал Perl "умирающим", как бы вы ни придерживались других мнений по этому поводу.

Поскольку вы сравнили Awk и Perl, вам может быть интересно взглянуть на книгу Minimal Perl. Он показывает, как Perl сравнивается с различными утилитами командной строки Unix/Linux. Он должен дать вам достаточно информации, чтобы принять более обоснованное решение о том, что изучать, независимо от вашего выбора.

Лично я думаю, что есть лучший выбор, чем Awk, и я изучил бы его, только если это был явно лучший выбор для моей задачи. Но опять же, я мог бы сказать то же самое о многих вещах...

Я до сих пор иногда использую awk - хотя я чаще использую Perl. Если вы не хотите изучать Perl, потому что думаете, что он умирает (точка зрения, с которой я не согласен, но вы имеете право на свою точку зрения), тогда рассмотрите вместо этого Python. Для простой обработки текстовых данных столбцов awk отлично подходит. Для более общей работы, Perl или Python превосходны. После этого вы переходите к системному программированию в тяжелых условиях и, возможно, к C или C++ (или Go, или...).

Bash - очень мощная оболочка. Есть еще вещи, которые Perl может сделать, а Bash - нет. Мне все еще нужно написать код, который будет работать с другими оболочками, поэтому я должен быть осторожен с тем, что я использую из набора функций Bash. Знание этого будет хорошо, но другие инструменты тоже найдут свое место.

Так что, если у вас есть время, чтобы изучить умеренно хорошо awk, или это будет легко для вас, потому что вы уже разбираетесь в компонентах (расширенные регулярные выражения, C-подобный синтаксис), то это иногда полезный инструмент для доступно для вас. Вы можете вместо этого изучить Perl или Python.

Это зависит от вашего уровня комфорта.

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

Однако я обнаружил, что чем дольше я делаю это, я хочу делать все более и более сложные вещи в однострочниках оболочки, а не заниматься накладными расходами "правильного" сценария perl. Я нахожу awk бесценным инструментом для выполнения сложных вещей.

Никогда не повредит изучению всего понемногу, даже если вам достаточно понять, что этот конкретный инструмент не вписывается в ваши способы ведения дел.

Другие вопросы по тегам