Я неплохо разбираюсь в сценариях bash, я ловлю на регулярное выражение и немного использую sed. Стоит ли изучать awk со всеми доступными альтернативами. Мнения?
Существуют разные альтернативы не потому, что каждый может делать то же самое, что и другой (хотя это верно для локализованных случаев или для полных языков программирования, таких как Perl), а потому, что они могут делать разные вещи.
sed не очень подходит для обработки табличных данных, и использование чистого bash для этого обычно более проблематично, чем хотелось бы. awk почти тривиально работает с табличными данными, а также может использоваться для написания небольших конечных автоматов. Потратьте некоторое время на изучение различных awk-решений в Stack Overflow, чтобы понять, что они могут делать.
Я использую awk все время и стараюсь избегать написания и использования Perl по мере возможности. Perl хотел сделать слишком много и стал языком общего назначения, но, к сожалению, имеет ужасный и нечитаемый синтаксис, ИМХО. Сопровождение сценариев perl, написанных кем-то другим, является проблемой, и это, как правило, верно и для наших собственных сценариев через некоторое время.
С другой стороны, awk имеет ограниченную, но целенаправленную область действия и хорошо с ней работает. Он относительно хорошо взаимодействует и со сценариями оболочки, в отличие от perl.
Что касается того, что bash выжил, я предпочитаю ksh93, если вы спросите меня.
Я бы не назвал Perl «умирающим», как бы вы ни относились к нему.
Поскольку вы сравнивали Awk и Perl, возможно, вам будет интересно посмотреть книгу Минимальный 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 бесценным инструментом для выполнения сложных задач.
Никогда не помешает выучить все понемногу, даже если вам достаточно понять, что этот конкретный инструмент не вписывается в ваш образ действий.