Есть ли еще основания для изучения AWK? - PullRequest
95 голосов
/ 20 сентября 2008

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

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

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

Ответы [ 24 ]

93 голосов
/ 01 апреля 2009

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

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

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

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

90 голосов
/ 20 сентября 2008

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

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

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

27 голосов
/ 20 сентября 2008

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

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

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

tr -s ' ' < file.in | cut -d' ' -f3
22 голосов
/ 20 сентября 2008

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

, например

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

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

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

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

7 голосов
/ 09 ноября 2008

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

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

Что здорово, если вы скребете по экрану. На самом деле, возможно, мне нравится AWK, потому что он позволяет мне быстро найти неправильное решение проблем :) больше примеров . Это также упоминается в прекрасных Programming Pearls Джона Бентли .

5 голосов
/ 20 сентября 2008

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

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

5 голосов
/ 20 сентября 2008

Большинство лайнеров awk one может быть достигнуто с помощью лайнеров Perl one - если вы решите войти в настрой Perl one liner. Или просто используйте Perl три лайнера:)

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

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

4 голосов
/ 20 сентября 2008

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

3 голосов
/ 14 ноября 2008

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

3 голосов
/ 20 декабря 2016

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

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

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

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