Есть ли еще какая-то причина для изучения AWK?

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

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

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

Ответ 1

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

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

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

Ответ 2

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

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

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

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

Ответ 3

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

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

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

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

Ответ 4

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

например.

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

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

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

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

Ответ 5

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

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

Ответ 6

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

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

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

Ответ 7

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

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

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

Ответ 8

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

Ответ 9

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

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

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

Ответ 10

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

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

Ответ 11

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

Ответ 12

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

Ответ 13

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

Ответ 14

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

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

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

Ответ 15

Неа.

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

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

Ответ 16

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

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

Ответ 17

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

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

Ответ 18

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

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

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

Ответ 19

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

Ответ 20

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

Ответ 21

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

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

Ответ 22

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

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