Вопрос

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

Тем не менее, мне интересно, есть ли еще смысл изучать некоторые из них. awk мне например интересно, но для простой обработки текста я могу использовать grep, cut, sed, и т. д.а для сложных я выберу Python.

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

Это было полезно?

Решение

Я думаю, это зависит от среды, в которой вы находитесь.Если вы *nix-человек, то зная awk это хорошая вещь.Единственная другая среда сценариев, которую можно найти практически в каждом *nix, — это sh.Так что пока grep, sed, и т. д., безусловно, может заменить awk в современном мейнстриме linux дистрибутива, при переходе на более экзотические системы, немного зная awk будет очень удобно.

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

В заключение, по всему миру ходит много старого кода, немного зная awk не повредит.Это также сделает вас лучше *nix person :-)

Другие советы

Если вы быстро изучите основы awk, вы действительно сможете делать удивительные вещи в командной строке.

Но настоящий Причина изучения awk — это повод прочитать превосходно книга Язык программирования AWK его авторы Ахо, Керниган и Вайнбергер.Судя по названию, можно подумать, что оно просто учит вас awalk.На самом деле, это только начало.Рассматривая широкий спектр проблем, которые можно решить, если использовать лаконичный язык сценариев, упрощающий манипулирование строками (а awk был одним из первых), в книге рассказывается, как реализовать базу данных, синтаксический анализатор и интерпретатор. и (если мне не изменяет память) компилятор небольшого компьютерного языка, специфичного для конкретного проекта!Если бы они также запрограммировали пример операционной системы с использованием awk, книга стала бы довольно полным обзорным введением в информатику!

Эта книга, известная ясностью и краткостью, как и оригинальная книга по языку C, также является прекрасным примером дружелюбного и правильно написанного технического письма.Даже указатель — это произведение искусства.

Ок?Если вы это знаете, вы будете время от времени использовать его в командной строке, но в случае чего-то большего вы почувствуете себя в ловушке, не имея доступа к более широким функциям вашей системы и Интернета, к которым предоставляет доступ что-то вроде Python.Но книга?Вы всегда будете рады, что прочитали это!

Единственная причина, по которой я использую awk это автоматическое разделение:

awk '{print $3}' < file.in

Это печатает третье поле, разделенное пробелами, в file.in.Это немного проще, чем:

tr -s ' ' < file.in | cut -d' ' -f3

Я думаю, awk хорош, если ваш файл содержит столбцы/поля.Я использую его при обработке/анализе определенного столбца в файле с несколькими столбцами.Или, если я хочу добавить/удалить определенный столбец (столбцы).

например

awk -F \t '{ if ($2 > $3) print; }' <filename>

будет печататься только в том случае, если значение второго столбца в файле, разделенном табуляцией, больше значения третьего столбца.

Конечно, я мог бы использовать Perl или Python, но awk делает это намного проще с помощью краткой однострочной команды.

Кроме того, изучение awk обходится довольно недорого.Вы можете изучить основы awk менее чем за час, так что это не так сложно, как изучение любого другого языка программирования/скриптов.

Я иногда использую AWK для работы с HTML.Например, этот код преобразует таблицы в файлы CSV:

BEGIN {s=""; FS="n"}
/<td/ { gsub(/<[^>]*>/, ""); s=(s ", " $1);}
/<tr|<TR/ { print s; s="" }

Это здорово, если вы очищаете экран.На самом деле, возможно, я люблю AWK, потому что он позволяет мне так быстро находить неправильное решение проблем :) больше примеров.Об этом также упоминается в прекрасном романе Джона Бентли. Жемчуг программирования.

Я использую awk время от времени.Это хорошо для очень простого перетасовки текста в середине конвейера;он заполняет очень узкую нишу между тем, чтобы он вообще не требовался, и необходимостью использовать Perl/Python/что-то еще.

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

Большинство однострочных программ awk можно реализовать с помощью однострочных программ Perl — если вы решите придерживаться однострочного подхода к Perl.Или просто используйте три вкладыша Perl :)

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

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

Если вы уже знаете и используете sed, вам стоит освоить хотя бы немного awk.Их можно соединить вместе для выполнения довольно мощных трюков.Всегда впечатляет публику.

Спустя 6 лет после того, как я задал этот вопрос, я теперь могу с уверенностью ответить:нет, изучать awk не стоит.

Основные задачи выполняются легко, но основные команды bash или даже инструменты графического интерфейса легко выполняются.Более сложные задачи можно легко решить с помощью современных динамических языков, таких как Python (любимый или мой) или Ruby.

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

Computerworld недавно сделал интервью с Альфредом В.Ахо (один из трёх создателей AWK) об AWK.Это довольно интересное чтение.Так что, возможно, вы найдете в нем некоторые подсказки, почему изучение AWK — это хорошая идея.

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

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

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

Конечно:Я работаю в среде, где доступны только следующие языки:(какой-то дерьмовый язык, который генерирует COBOL, OMG, OMG), bash (старая версия), perl (еще не освоил), sed, awk и некоторые другие утилиты командной строки.Зная awk сэкономил мне несколько часов (и сгенерировал несколько задач по обработке текста от моих коллег - они приходят ко мне как минимум три раза в день).

awk имеет очень хорошее соотношение полезности и сложности, а «простой awk» работает во всех Unix/Linux/MacOS (и его можно установить и в других системах).

Он был разработан в Золотой век, когда люди ненавидели печатать, поэтому сценарии можно было писать очень, очень короткими и быстрыми.Попробую установить mawk, быструю версию, якобы она ускоряет вычисления примерно в 9 раз, awk/gawk довольно медленная, поэтому если вы хотите использовать ее вместо R и т.д.вам может понадобиться маук.

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

Следующая команда, вероятно, единственная, для которой я использовал awk за последние два года (она удаляет наполовину удаленные пакеты из моих систем Debian/Ubuntu):

$ dpkg -l|awk '/^rc/ {print $2}'|xargs sudo dpkg -P

Неа.

Хотя это может быть интересно, вы можете делать все, что может делать awk, используя другие, более мощные инструменты, такие как Perl.

Потратьте свое время на изучение этих более мощных инструментов - и лишь случайно по пути приобретите немного awk.

Я бы сказал, что есть.Для простых вещей неопытному системному администратору/разработчику намного проще использовать AWK, чем Python.Вы можете немного выучить AWK и делать много чего, изучение Python означает изучение совершенно нового языка (да, я знаю, что AWK — это тоже язык, в котором есть смысл).

Perl может делать многое из того, что может AWK, но если бы в наши дни у меня был выбор, я бы выбрал Python.Так что да, вам следует изучить AWK.но выучите и Python :-)

Теперь, когда PERL портирован практически на все значимые платформы, я бы сказал, что оно того не стоит.Это более универсально, чем sed и awk вместе.Что касается автоматического разделения, вы можете сделать это в Perl следующим образом:

perl -F':' -ane 'print $F[3],"\n";' /etc/passwd

РЕДАКТИРОВАТЬ:возможно, ты все еще хочешь получить в некотором роде знаком с awk, потому что некоторые другие инструменты основаны на его философии действий на основе шаблонов (например,DTrace в Solaris).

Я работаю в области, где файлы имеют формат столбца.Поэтому awk для меня неоценим: ПЕРЕФОРМАТИРУЙТЕ файл, чтобы разные программы могли работать вместе.Для профессий, не связанных с ИТ, использование awk достаточно и идеально.Сегодня скорость компьютера не является проблемой, поэтому я могу объединить awk и unix для передачи множества однострочных команд в «скрипт».Благодаря поиску Awk по полю и записи я использую его для очень быстрой проверки данных файла вместо «vi» для открытия файла.Я должен сказать, что возможности awk особенно принесли радость моей работе: я могу помочь коллеге быстро разобраться во всем с помощью awk.Удивительный для меня код.

Недавно я пытался визуализировать сетевые файлы pcap, регистрирующие DOS-атаку, размер которой превысил 20 Гбит/с.Мне нужна была отметка времени и IP-адреса.В моем сценарии АВК однострочник работал потрясающе и довольно быстро.я специально использовал АВК чтобы очистить извлеченные файлы, получите IP-адреса и общее количество пакетов с этих IP-адресов в течение сгруппированного промежутка времени.Я полностью согласен с тем, что написали выше другие люди.Это зависит от ваших потребностей.

awk это язык Powertool, поэтому вы, вероятно, обнаружите awk где-то используется, если вы какой-либо ИТ-специалист.Если вы умеете обращаться с синтаксисом и регулярными выражениями grep и sed тогда у тебя не должно возникнуть проблем с тем, чтобы взять трубку awk и, наверное, это того стоит.

Где я нашел awk действительно хорош в упрощении таких вещей, как обработка многострочных записей и одновременное искажение/интерполяция нескольких файлов.

Одна из причин НЕ изучать awk заключается в том, что он не имеет нежадных совпадений в регулярных выражениях.

У меня есть код awk, который теперь мне нужно переписать только потому, что я внезапно обнаружил, что в awk/gawk нет такой вещи, как нежадные совпадения, поэтому он не может правильно выполнять некоторые регулярные выражения.

Это зависит от ваших товарищей по команде, вашего лидера и задачи, над которой вы работаете.

if( team mates and leader ask to write awk ){
  if( you can reject that){
    if( awk code is very small){
      learn little just like learn Regex
    }else{
      use python or even java
    }
  }else{
    do as they ask
  }
}

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

С помощью awk я могу быстро разработать однострочный фрагмент кода в командной строке Unix, который выполняет несколько довольно резких преобразований.Каждый раз, когда я использую awk, фрагмент кода, который я пишу, будет одноразовым и длиной не более нескольких строк.Возможно, оператор «if» и оператор «printf» здесь или там в одной строке.

Я никогда не писал с помощью awk фрагмент кода длиной более 10 строк.Я видел несколько таких сценариев много лет назад.

Но для всего, что требует много строк кода, я бы прибегнул к Python.

Я люблю АВК.Это очень мощный инструмент в сочетании с sed.

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