~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ D2F3E8529CF0C9DD896EC263243B33F5__1714652280 ✰
Заголовок документа оригинал.:
✰ AWK - Wikipedia ✰
Заголовок документа перевод.:
✰ АВК — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/AWK ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/d2/f5/d2f3e8529cf0c9dd896ec263243b33f5.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/d2/f5/d2f3e8529cf0c9dd896ec263243b33f5__translat.html ✰
Дата и время сохранения документа:
✰ 21.06.2024 09:36:39 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 2 May 2024, at 15:18 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

АВК — Википедия Jump to content

АВК

Из Википедии, бесплатной энциклопедии
АВК
Парадигма Скрипты , процедурные , управляемые данными [1]
Разработано Альфред Ахо , Питер Вайнбергер и Брайан Керниган
Впервые появился 1977 год ; 47 лет назад ( 1977 )
Стабильная версия
IEEE Std 1003.1-2008 (POSIX)/1985 г.
Дисциплина набора текста никто; может обрабатывать строки, целые числа и числа с плавающей запятой; обычные выражения
ТЫ Кросс-платформенный
Основные реализации
awk, GNU Awk, mawk, nawk, MKS AWK, Thompson AWK (компилятор), Awka (компилятор)
Диалекты
старый awk oawk 1977 года, новый awk nawk 1985 года, GNU Awk gawk
Под влиянием
С , СЭД , СНОБОЛ [2] [3]
Под влиянием
Tcl , AMPL , Perl , Korn Shell ( ksh93 , dtksh , tksh ), Lua

AWK ( / ɔː k / [4] ) — это предметно-ориентированный язык , предназначенный для обработки текста и обычно используемый в качестве инструмента извлечения данных и составления отчетов. Подобно sed и grep , это фильтр . [4] и является стандартной функцией большинства Unix-подобных операционных систем .

Язык AWK — это управляемый данными язык сценариев , состоящий из набора действий, которые необходимо предпринять над потоками текстовых данных — либо запускаемых непосредственно в файлах, либо используемых как часть конвейера с целью извлечения или преобразования текста, например создания форматированного текста. отчеты. Язык широко использует строковый тип данных , ассоциативные массивы (то есть массивы, индексированные ключевыми строками) и регулярные выражения . Хотя AWK имеет ограниченную область применения и был специально разработан для поддержки однострочных программ , этот язык является полным по Тьюрингу , и даже первые пользователи AWK в Bell Labs часто писали хорошо структурированные большие программы AWK. [5]

AWK был создан в Bell Labs в 1970-х годах. [6] и его название происходит от фамилий его авторов: Альфреда Ахо (автора egrep ), Питера Вайнбергера (работавшего над крошечными реляционными базами данных) и Брайана Кернигана . Аббревиатура произносится так же, как название вида птиц Auk , которое изображено на обложке книги «Язык программирования AWK» . [7] При написании строчными буквами, т.к. awk, это относится к программе Unix или Plan 9 , которая запускает сценарии, написанные на языке программирования AWK.

История [ править ]

По словам Брайана Кернигана, одной из целей AWK было создание инструмента, который позволял бы легко манипулировать как числами, так и строками. AWK также был вдохновлен языком программирования Марка Рохкинда , который использовался для поиска шаблонов во входных данных и был реализован с помощью yacc . [8]

Будучи одним из первых инструментов, появившихся в версии 7 Unix Unix , AWK добавил вычислительные функции в конвейер помимо оболочки Bourne , единственного языка сценариев, доступного в стандартной среде Unix. Это одна из обязательных утилит Единой спецификации UNIX . [9] и требуется стандартной базовой спецификацией Linux. [10]

В 1983 году AWK был одним из нескольких инструментов UNIX, доступных для операционной системы UNOS компании Charles River Data Systems по Bell Laboratories . лицензии [11]

AWK был существенно переработан и расширен в 1985–88 годах, в результате чего в 1988 году была выпущена реализация GNU AWK , написанная Полом Рубином, Джеем Фенласоном и Ричардом Столлманом . [12] GNU AWK может быть наиболее широко используемой версией. [13] потому что он включен в пакеты Linux на базе GNU. GNU AWK поддерживается исключительно Арнольдом Роббинсом с 1994 года. [12] Исходный код Брайана Кернигана nawk ( New AWK) был впервые опубликован в 1993 году неопубликованным и общедоступным с конца 1990-х годов; многие системы BSD используют его, чтобы избежать лицензии GPL. [12]

AWK предшествовал sed (1974). Оба были разработаны для обработки текста. Они разделяют парадигму строкового ориентирования и управления данными и особенно подходят для написания однострочных программ благодаря неявному основному циклу и переменным текущей строки. Мощь и краткость ранних программ AWK – особенно мощная обработка регулярных выражений и краткость благодаря неявным переменным, которые облегчают однострочник – вместе с ограничениями AWK того времени послужили важным источником вдохновения для языка Perl (1987). В 1990-е годы Perl стал очень популярным, конкурируя с AWK в нише языков обработки текста Unix.

Структура программ AWK [ править ]

AWK считывает ввод построчно. Для каждого шаблона в программе сканируется строка, и для каждого шаблона, который соответствует, выполняется соответствующее действие.

—  Alfred V. Aho [14]

Программа AWK представляет собой серию пар шаблонов действий, записанных как:

условие   {   действие   } 
 условие   {   действие   } 
 ... 

где условие обычно является выражением, а действие — серией команд. Ввод разбивается на записи, причем по умолчанию записи разделяются символами новой строки, так что ввод разбивается на строки. Программа поочередно проверяет каждую запись на соответствие каждому из условий и выполняет действие для каждого истинного выражения. Либо условие, либо действие можно опустить. По умолчанию условие соответствует каждой записи. Действием по умолчанию является печать записи. Это та же структура действий, что и в sed.

В дополнение к простому выражению AWK, такому как foo == 1 или /^foo/, условие может быть BEGIN или END вызывающее выполнение действия до или после того, как все записи будут прочитаны, или шаблон1, шаблон2 , который соответствует диапазону записей, начиная с записи, соответствующей шаблону1 включительно, , до записи, соответствующей шаблону2 перед повторной попыткой сопоставления с шаблоном1 в последующих линии.

Помимо обычных арифметических и логических операторов, выражения AWK включают оператор тильда, ~, который сопоставляет регулярное выражение со строкой. В качестве удобного синтаксического сахара / regexp/ без использования оператора тильды сопоставляется с текущей записью; этот синтаксис получен из sed , который, в свою очередь, унаследовал его от редактора ed , где /используется для поиска. Этот синтаксис использования косых черт в качестве разделителей для регулярных выражений впоследствии был принят Perl и ECMAScript и теперь широко распространен. Оператор тильда также был принят в Perl.

Команды [ править ]

Команды AWK — это операторы, которые заменяют действия в приведенных выше примерах. Команды AWK могут включать вызовы функций, присвоение переменных, вычисления или любую их комбинацию. AWK содержит встроенную поддержку многих функций; многие другие предоставляются различными вариантами AWK. Кроме того, некоторые варианты поддерживают включение динамически подключаемых библиотек , которые также могут предоставлять больше функций.

Команда печати [ править ]

Команда печати используется для вывода текста. Выходной текст всегда заканчивается предопределенной строкой, называемой разделителем выходных записей (ORS), значением которой по умолчанию является новая строка. Самая простая форма этой команды:

print
Отобразится содержимое текущей записи. В AWK записи разбиты на поля , и их можно отображать отдельно:
print $1
Отображает первое поле текущей записи
print $1, $3
Отображает первое и третье поля текущей записи, разделенные предопределенной строкой, называемой разделителем выходных полей (OFS), значением которой по умолчанию является один символ пробела.

Хотя эти поля ( $X ) могут иметь сходство с переменными (символ $ обозначает переменные в обычных оболочках Unix и в Perl ), на самом деле они относятся к полям текущей записи. Особый случай $0 относится ко всей записи. На самом деле команды " print" и " print $0" идентичны по функциональности.

Команда печати также может отображать результаты вычислений и/или вызовов функций:

/regex_pattern/   { 
     # Действия, которые необходимо выполнить в случае, если запись (строка) соответствует указанному выше regex_pattern 
     print   3  +  2 
     print   foobar  (  3  ) 
     print   foobar  (  variable  ) 
     print   sin  (  3  -  2  ) 
 } 

Вывод может быть отправлен в файл:

/regex_pattern/   { 
     # Действия, которые необходимо выполнить в случае, если запись (строка) соответствует указанному выше regex_pattern 
     print   «выражение»   >   «имя файла» 
 } 

или через трубу :

/regex_pattern/   { 
     # Действия, выполняемые в случае, если запись (строка) соответствует указанному выше regex_pattern 
     print   "expression"   |    «команда» 
 } 

Встроенные переменные [ править ]

Встроенные переменные Awk включают переменные полей: $1, $2, $3 и т. д. ($0 представляет всю запись). Они содержат текст или значения в отдельных текстовых полях записи.

Другие переменные включают в себя:

  • NR: Количество записей. Сохраняет текущий подсчет количества входных записей, прочитанных на данный момент из всех файлов данных. Он начинается с нуля, но никогда не сбрасывается автоматически на ноль. [15]
  • FNR: Количество записей в файле. Сохраняет текущий подсчет количества входных записей, прочитанных на данный момент в текущем файле. Эта переменная автоматически обнуляется каждый раз при запуске нового файла. [15]
  • NF: Количество полей. Содержит количество полей в текущей входной записи. Последнее поле во входной записи может быть обозначено $NF, предпоследнее поле — $(NF-1), предпоследнее поле — $(NF-2) и т. д.
  • FILENAME: Содержит имя текущего входного файла.
  • FS: Разделитель полей. Содержит «разделитель полей», используемый для разделения полей во входной записи. По умолчанию «пробелы» допускают любую последовательность пробелов и символов табуляции. FS можно переназначить с помощью другого символа или последовательности символов, чтобы изменить разделитель полей.
  • RS: Разделитель записей. Сохраняет текущий символ «разделителя записей». Поскольку по умолчанию строка ввода является входной записью, символом-разделителем записей по умолчанию является «новая строка».
  • OFS: Разделитель выходных полей. Хранит «разделитель выходных полей», который разделяет поля, когда Awk их печатает. По умолчанию используется символ «пробел».
  • ORS: Разделитель выходных записей. Хранит «разделитель выходных записей», который разделяет выходные записи, когда Awk их печатает. По умолчанию используется символ «новой строки».
  • OFMT: Выходной формат. Сохраняет формат числового вывода. Формат по умолчанию — "%.6g".

Переменные и синтаксис [ править ]

Имена переменных могут использовать любые символы [A-Za-z0-9_], за исключением ключевых слов языка. Операторы +-*/ обозначают сложение, вычитание, умножение и деление соответственно. Для конкатенации строк просто поместите две переменные (или строковые константы) рядом друг с другом. Если используются строковые константы, использовать пробел между ними необязательно, но для двух имен переменных, расположенных рядом друг с другом, между ними требуется пробел. двойными кавычками Строковые константы разделяются . Операторы не обязательно должны заканчиваться точкой с запятой. Наконец, комментарии можно добавлять в программы, используя # в качестве первого символа в строке или после команды или последовательности команд.

Пользовательские функции [ править ]

В формате, аналогичном C , определения функций состоят из ключевого слова function, имя функции, имена аргументов и тело функции. Вот пример функции.

функция   add_three   (  число  )   { 
     возвращаемое   число   +   3 
 } 

Это утверждение можно вызвать следующим образом:

(  шаблон  )   { 
    print   add_three  (  36  )       # Выходы '''39''' 
 } 

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

Примеры [ править ]

Привет, мир! [ редактировать ]

Вот привычное «Привет, Мир!» программа, написанная на AWK:

BEGIN   { 
         print   "Привет, мир!" 
          Выход 
 } 

Печатать строки длиной более 80 символов [ править ]

Выведите все строки длиной более 80 символов. Действием по умолчанию является печать текущей строки.

длина  (  $  0  )   >   80 

Посчитать слова [ править ]

Подсчитайте слова во входных данных и выведите количество строк, слов и символов (например, wc ):

{ 
     words   +=   NF 
     chars   +=   length   +   1   # добавьте один, чтобы учесть символ новой строки в конце каждой записи (строки) 
 } 
 END   {   print   NR  ,   words  ,   chars   } 

Поскольку для первой строки программы нет шаблона, каждая строка ввода соответствует по умолчанию, поэтому действия по увеличению выполняются для каждой строки. words += NF это сокращение от words = words + NF.

Сумма последнего слова [ править ]

{   s   +=   $  NF   } 
 END   {   напечатать   s   +   0   } 

s увеличивается на числовое значение $NF , которое является последним словом в строке, как определено разделителем полей AWK (по умолчанию пробел). NF — это количество полей в текущей строке, например 4. Поскольку $4 — это значение четвертого поля, $NF — это значение последнего поля в строке независимо от того, сколько полей в этой строке или больше ли в ней полей. или меньше полей, чем окружающие строки. $ на самом деле является унарным оператором с наивысшим приоритетом оператора . (Если в строке нет полей, то NF равен 0, $0 — это вся строка, которая в этом случае пуста, за исключением возможных пробелов, и поэтому имеет числовое значение 0.)

В конце ввода шаблон END совпадает, поэтому s выводится никогда не присваивалось значение . Однако, поскольку строк ввода могло вообще не быть, и в этом случае s , по умолчанию это будет пустая строка. Добавление нуля к переменной — это идиома AWK для приведения ее из строки к числовому значению. (Объединение пустой строки означает приведение числа к строке, например s "" . Обратите внимание, что нет оператора для объединения строк, они просто размещаются рядом.) При приведении программа печатает "0" на пустом вводе. , без него печатается пустая строка.

Сопоставить диапазон входных строк [ править ]

NR   %   4   ==   1  ,   NR   %   4   ==   3   {   printf   "%6d %s\n"  ,   NR  ,   $  0   } 

Оператор действия печатает каждую пронумерованную строку. Функция printf эмулирует стандартную функцию printf языка C и работает аналогично команде печати, описанной выше. Однако шаблон для сопоставления работает следующим образом: NR — это количество записей, обычно строк ввода, которые AWK уже прочитал, т. е. текущий номер строки, начиная с 1 для первой строки ввода. % оператор по модулю . NR % 4 == 1 верно для 1-й, 5-й, 9-й и т. д. строк ввода. Аналогично, NR % 4 == 3 верно для 3-й, 7-й, 11-й и т. д. строк ввода. Шаблон диапазона является ложным до тех пор, пока первая часть не совпадет в строке 1, а затем остается истинным до совпадения второй части в строке 3 включительно. Затем он остается ложным до тех пор, пока первая часть снова не совпадет в строке 5.

Таким образом, программа печатает строки 1,2,3, пропускает строку 4, затем 5,6,7 и так далее. Для каждой строки он печатает номер строки (в поле шириной 6 символов), а затем ее содержимое. Например, при выполнении на этом входе:

Рим
 Флоренция
 Милан
 Неаполь
 Турин
 Венеция
 

Предыдущая программа печатает:

1 Рим
      2 Флоренция
      3 Милан
      5 Турин
      6 Венеция
 

Печать начальной или конечной части файла [ править ]

В частном случае, когда первая часть шаблона диапазона всегда истинна, например 1 , диапазон начинается с начала входных данных. Аналогично, если вторая часть всегда ложна, например 0 , диапазон будет продолжаться до конца ввода. Например,

 /^--вырезать здесь--$/  ,   0 

печатает строки ввода из первой строки, соответствующие регулярному выражению ^--cut here--$ , то есть строку, содержащую до конца только фразу "--cut here--".

Вычислить частоты слов [ править ]

Частота слов с использованием ассоциативных массивов :

BEGIN   { 
     FS  =  "[^a-zA-Z]+" 
 } 
 { 
     for   (  i  =  1  ;   i  <=  NF  ;   i  ++  ) 
         слов  [  tolower  (  $  i  )]  ++ 
 } 
 END   { 
     for   (  i   в   словах  ) 
         напечатайте   i  ,   слова  [  i  ] 
 } 

Блок BEGIN устанавливает в качестве разделителя полей любую последовательность неалфавитных символов. Разделителями могут быть регулярные выражения. После этого мы переходим к простому действию, которое выполняет действие над каждой входной строкой. В этом случае к каждому полю в строке мы прибавляем единицу к количеству раз, которое встречается это слово, сначала преобразованное в нижний регистр. Наконец, в блоке END мы печатаем слова с их частотностью. Линия

за (я словами)
 

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

Сопоставить шаблон из командной строки [ править ]

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

#!/bin/sh 

 шаблон  =  "  $1  " 
 сдвиг 
  awk   '/'  "  $pattern  "  '/ { print FILENAME ":" $0 }'   "  $@  " 

The $patternв команде awk не защищен одинарными кавычками, поэтому оболочка расширяет переменную, но ее необходимо поместить в двойные кавычки, чтобы правильно обрабатывать шаблоны, содержащие пробелы. Сам по себе шаблон обычным способом проверяет, вся ли строка ( $0) Матчи. FILENAMEсодержит текущее имя файла. awk не имеет явного оператора конкатенации; две соседние строки объединяют их. $0 расширяется до исходной неизмененной строки ввода.

Есть альтернативные способы написания этого. Этот сценарий оболочки обращается к среде непосредственно из awk:

#!/bin/sh 

 экспорта   шаблон  =  "  $1  " 
 сдвиг 
  awk   '$0 ~ ENVIRON["шаблон"] { print FILENAME ":" $0 }'   "  $@  " 

Это сценарий оболочки, который использует ENVIRON, массив, представленный в новой версии One True awk после публикации книги. Индекс ENVIRON— имя переменной среды; его результатом является значение переменной. Это похоже на функцию getenv в различных стандартных библиотеках и POSIX . Сценарий оболочки создает переменную среды pattern содержащий первый аргумент, затем отбрасывает этот аргумент и заставляет awk искать шаблон в каждом файле.

~ проверяет, соответствует ли его левый операнд правому операнду; !~является его обратным. Регулярное выражение представляет собой просто строку и может храниться в переменных.

Следующий способ использует присвоение переменных из командной строки, при котором аргумент awk можно рассматривать как присвоение переменной:

#!/bin/sh 

 шаблон  =  "  $1  " 
 сдвиг 
  awk   '$0 ~ шаблон { print FILENAME ":" $0 }'   "pattern=  $pattern  "   "  $@  " 

Или вы можете использовать -v var=value параметр командной строки (например, awk -v шаблон="$pattern" ... ).

Наконец, это написано на чистом awk, без помощи оболочки или без необходимости слишком много знать о реализации сценария awk (как это происходит при назначении переменной в командной строке), но оно немного длинное:

BEGIN   { 
     шаблон   =   ARGV  [  1  ] 
     for   (  i   =   1  ;   i   <   ARGC  ;   i  ++  )   # удалить первый аргумент 
         ARGV  [  i  ]   =   ARGV  [  i   +   1  ] 
     ARGC  -- 
     if   (  ARGC   ==   1  )   {   # шаблон был единственным, поэтому принудительное чтение со стандартного ввода (используемого книгой) 
         ARGC   =   2 
         ARGV  [  1  ]   =   "-" 
     } 
 } 
 $  0   ~   шаблон   {   print   FILENAME   ":"   $  0   } 

The BEGIN необходимо не только для извлечения первого аргумента, но и для предотвращения его интерпретации как имени файла после BEGIN блок заканчивается. ARGC, количество аргументов всегда гарантированно будет ≥1, поскольку ARGV[0] — имя команды, выполнившей скрипт, чаще всего строка "awk". ARGV[ARGC] пустая строка, "". # инициирует комментарий, который расширяется до конца строки.

Обратите внимание ifблокировать. awk только проверяет, следует ли ему читать данные из стандартного ввода, прежде чем запускать команду. Это значит, что

ты "прог"
 

работает только потому, что факт отсутствия имен файлов проверяется только перед progзапущен! Если вы явно задали ARGCдо 1, чтобы не было аргументов, awk просто завершит работу, поскольку почувствует, что входных файлов больше нет. Поэтому вам нужно явно указать, что нужно читать со стандартного ввода со специальным именем файла. -.

Автономные скрипты AWK [ править ]

В Unix-подобных операционных системах автономные сценарии AWK можно создавать с использованием синтаксиса shebang .

Например, сценарий, который отправляет содержимое данного файла на стандартный вывод, можно создать, создав файл с именем print.awk со следующим содержанием:

#!/usr/bin/awk -f 
 {   print   $  0   } 

Его можно вызвать с помощью: ./print.awk <filename>

The -fсообщает awk, что следующий аргумент — это файл, из которого будет читаться программа AWK, и это тот же флаг, который используется в sed. Поскольку они часто используются для однострочных строк, обе эти программы по умолчанию выполняют программу, заданную в качестве аргумента командной строки, а не отдельный файл.

Версии и реализации [ править ]

AWK был первоначально написан в 1977 году и распространялся вместе с версией 7 Unix .

В 1985 году его авторы начали расширять язык, в первую очередь за счет добавления пользовательских функций. Язык описан в книге The AWK Programming Language , опубликованной в 1988 году, а его реализация была доступна в выпусках UNIX System V. Чтобы избежать путаницы с несовместимой старой версией, эту версию иногда называли «новым awk» или nawk . Эта реализация была выпущена под лицензией свободного программного обеспечения в 1996 году и до сих пор поддерживается Брайаном Керниганом (см. внешние ссылки ниже). [ нужна цитата ]

Старые версии Unix, такие как UNIX/32V , включены. awkcc, который преобразовал AWK в C. Керниган написал программу для преобразования awk в C++; его состояние неизвестно. [16]

  • BWK awk , также известный как nawk , относится к версии Брайана Кернигана . Его назвали «One True AWK» из-за использования этого термина в связи с книгой, в которой первоначально описывался язык, а также из-за того, что Керниган был одним из первых авторов AWK. [7] FreeBSD называет эту версию one-true-awk . [17] В этой версии также есть функции, отсутствующие в книге, такие как tolower и ENVIRONкоторые объяснены выше; подробности см. в файле FIXES в исходном архиве. Эту версию используют, например, Android , FreeBSD , NetBSD , OpenBSD , macOS и illumos . Брайан Керниган и Арнольд Роббинс являются основными участниками репозитория исходного кода nawk : github. /onetrueawk / авк .
  • gawk ( GNU awk) — еще одна реализация свободного программного обеспечения и единственная реализация, которая добилась серьезного прогресса в реализации интернационализации и локализации , а также сетей TCP/IP. Он был написан до того, как первоначальная реализация стала свободно доступной. Он включает в себя собственный отладчик, а его профилировщик позволяет пользователю измерять повышение производительности сценария. Это также позволяет пользователю расширять функциональность с помощью общих библиотек. Некоторые дистрибутивы Linux включают gawk в качестве реализации AWK по умолчанию. [ нужна цитата ] Начиная с версии 5.2 (сентябрь 2022 г.) gawk включает функцию постоянной памяти, которая может запоминать определенные в сценарии переменные и функции от одного вызова сценария к другому и передавать данные между несвязанными сценариями, как описано в Руководстве пользователя gawk с постоянной памятью : www .gnu .org /программное обеспечение /глаз /руководство /pm-gawk / .
    • gawk-csv . Расширение CSV для gawk предоставляет возможности для обработки входных и выходных данных в формате CSV. [18]
  • mawk — это очень быстрая реализация AWK Майка Бреннана, основанная на интерпретаторе байт-кода .
  • libmawk — это ответвление mawk, позволяющее приложениям встраивать несколько параллельных экземпляров интерпретаторов awk.
  • awka (чей интерфейс написан поверх программы mawk ) — еще один переводчик сценариев AWK в код C. При компиляции со статическим включением авторского libawka.a полученные исполняемые файлы значительно ускоряются и, согласно тестам автора, очень хорошо сравниваются с другими версиями AWK, Perl или Tcl . Небольшие скрипты превратятся в программы размером 160–170 Кб.
  • tawk AWK (Thompson AWK) — компилятор для Solaris , DOS , OS/2 и Windows , ранее продаваемый компанией Thompson Automation Software (которая прекратила свою деятельность). [19]
  • Jawk — это проект по реализации AWK на Java , размещенный на SourceForge. [20] Расширения языка добавляются для обеспечения доступа к функциям Java в сценариях AWK (т. е. к потокам Java, сокетам, коллекциям и т. д.).
  • xgawk — это форк gawk [21] который расширяет gawk динамически загружаемыми библиотеками. Расширение XMLgawk было интегрировано в официальную версию GNU Awk 4.1.0.
  • QSEAWK — это встроенная реализация интерпретатора AWK, включенная в библиотеку QSE, которая обеспечивает встраивание интерфейса прикладного программирования (API) для C и C++ . [22]
  • libfawk — это очень маленький, реентерабельный, встраиваемый интерпретатор, предназначенный только для функций, написанный на C.
  • BusyBox включает реализацию AWK, написанную Дмитрием Захаровым. Это очень маленькая реализация, подходящая для встроенных систем.
  • CLAWK Майкла Паркера предоставляет реализацию AWK в Common Lisp , основанную на библиотеке регулярных выражений того же автора. [23]
  • goawk — это реализация AWK на Go с несколькими удобными расширениями от Бена Хойта, размещенная на Github .

Книги [ править ]

  • Ахо, Альфред В .; Керниган, Брайан В .; Вайнбергер, Питер Дж. (1 января 1988 г.). Язык программирования AWK . Нью-Йорк, штат Нью-Йорк: Аддисон-Уэсли . ISBN  0-201-07981-Х . Проверено 22 января 2017 г.
  • Ахо, Альфред В .; Керниган, Брайан В .; Вайнбергер, Питер Дж. (6 сентября 2023 г.). Язык программирования AWK, второе издание . Хобокен, Нью-Джерси: Addison-Wesley Professional . ISBN  978-0-13-826972-2 . Архивировано из оригинала 27 октября 2023 г. Проверено 3 ноября 2023 г.
  • Роббинс, Арнольд (15 мая 2001 г.). Эффективное программирование awk (3-е изд.). Севастополь, Калифорния: O'Reilly Media . ISBN  0-596-00070-7 . Проверено 16 апреля 2009 г.
  • Догерти, Дейл ; Роббинс, Арнольд (1 марта 1997 г.). sed & awk (2-е изд.). Севастополь, Калифорния: O'Reilly Media. ISBN  1-56592-225-5 . Проверено 16 апреля 2009 г.
  • Роббинс, Арнольд (2000). Эффективное программирование на Awk: Руководство пользователя по Gnu Awk (изд. 1.0.3). Блумингтон, Индиана: iUniverse . ISBN  0-595-10034-1 . Архивировано из оригинала 12 апреля 2009 года . Проверено 16 апреля 2009 г.

См. также [ править ]

Ссылки [ править ]

  1. ^ Штутц, Майкл (19 сентября 2006 г.). «Начало работы с GAWK: основы языка AWK» (PDF) . РазработчикWorks . ИБМ . Архивировано (PDF) из оригинала 27 апреля 2015 г. Проверено 29 января 2015 г. [AWK] часто называют языком, управляемым данными — операторы программы описывают входные данные, которые необходимо сопоставить и обработать, а не последовательность шагов программы.
  2. ^ Андреас Дж. Пилавакис (1989). UNIX-семинар . Международное высшее образование Макмиллана. п. 196.
  3. ^ Арнольд Роббинс (2015). Эффективное программирование на Awk: универсальная обработка текста и сопоставление с образцом (4-е изд.). О'Рейли Медиа. п. 560.
  4. ^ Перейти обратно: а б Джеймс В. Ливингстон (2 мая 1988 г.). «Великая программа awk — это не птичий мозг». Цифровой обзор . п. 91.
  5. ^ Рэймонд, Эрик С. «Применение мини-языков» . Искусство программирования для Unix . Практический пример: awk. Архивировано из оригинала 30 июля 2008 года . Проверено 11 мая 2010 г. Язык действий awk является полным по Тьюрингу и может читать и записывать файлы.
  6. ^ Ахо, Альфред В .; Керниган, Брайан В .; Вайнбергер, Питер Дж. (1 сентября 1978 г.). Awk — язык сканирования и обработки шаблонов (второе издание) (технический отчет). Руководство по Unix, седьмое издание, том 2. Bell Telephone Laboratories, Inc. Проверено 1 февраля 2020 г.
  7. ^ Перейти обратно: а б Ахо, Альфред В.; Керниган, Брайан В.; Вайнбергер, Питер Дж. (1988). Язык программирования AWK . Издательство Аддисон-Уэсли. ISBN  9780201079814 . Проверено 16 мая 2015 г.
  8. ^ «Специальный выпуск UNIX: профессора Керниган и Брейлсфорд» . Компьютерфил . 30 сентября 2015 г. Архивировано из оригинала 22 ноября 2021 г.
  9. ^ «Единая спецификация UNIX, версия 3, таблица интерфейса утилит» . Архивировано из оригинала 05 января 2018 г. Проверено 18 декабря 2005 г.
  10. ^ «Глава 15. Команды и утилиты». Стандартная базовая базовая спецификация Linux 4.0 (технический отчет). Фонд Linux. 2008. Архивировано из оригинала 16 октября 2019 г. Проверено 01 февраля 2020 г.
  11. ^ Путеводитель по Вселенной для инсайдеров (PDF) . Charles River Data Systems, Inc., 1983. с. 13.
  12. ^ Перейти обратно: а б с Роббинс, Арнольд (март 2014 г.). «Проект GNU и я: 27 лет с GNU AWK» (PDF) . skeeve.com . Архивировано (PDF) из оригинала 6 октября 2014 г. Проверено 4 октября 2014 г.
  13. ^ Догерти, Дейл; Роббинс, Арнольд (1997). sed & awk (2-е изд.). Севастополь, Калифорния: О'Рейли. п. 221. ИСБН  1-565-92225-5 .
  14. ^ Гамильтон, Наоми (30 мая 2008 г.). «А-Я языков программирования: AWK» . Компьютерный мир . Архивировано из оригинала 01 февраля 2020 г. Проверено 12 декабря 2008 г.
  15. ^ Перейти обратно: а б «Записи (Руководство пользователя GNU Awk)» . Архивировано из оригинала 14 июня 2020 г. Проверено 23 мая 2020 г.
  16. ^ Керниган, Брайан В. (24–25 апреля 1991 г.). Переводчик AWK в C++ (PDF) . Конференция Usenix C++. Вашингтон, округ Колумбия. стр. 217–228. Архивировано (PDF) из оригинала 22 июня 2020 г. Проверено 01 февраля 2020 г.
  17. ^ «Журнал работы FreeBSD для импорта BWK awk в ядро ​​FreeBSD» . 16 мая 2005 года. Архивировано из оригинала 8 сентября 2013 года . Проверено 20 сентября 2006 г.
  18. ^ «Обработка CSV с помощью gawk (с использованием расширения gawk-csv)» . gawkextlib . 2018. Архивировано из оригинала 25 марта 2020 г.
  19. ^ Джеймс К. Лоулесс (1 мая 1997 г.). «Изучение компилятора TAWK» . Журнал доктора Добба . Архивировано из оригинала 21 февраля 2020 года . Проверено 21 февраля 2020 г.
  20. ^ « Челюсть в SourceForge» . Архивировано из оригинала 27 мая 2007 г. Проверено 23 августа 2006 г.
  21. ^ « xgawk Домашняя страница » . Архивировано из оригинала 18 апреля 2013 г. Проверено 7 мая 2013 г.
  22. ^ «QSEAWK на GitHub» . Гитхаб . Архивировано из оригинала 11 июня 2018 г. Проверено 6 сентября 2017 г.
  23. ^ «CLAWK на GitHub» . Гитхаб . Архивировано из оригинала 25 августа 2021 г. Проверено 1 июня 2021 г.

Дальнейшее чтение [ править ]

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: D2F3E8529CF0C9DD896EC263243B33F5__1714652280
URL1:https://en.wikipedia.org/wiki/AWK
Заголовок, (Title) документа по адресу, URL1:
AWK - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)