АВК
Парадигма | Скрипты , процедурные , управляемые данными [1] |
---|---|
Разработано | Альфред Ахо , Питер Вайнбергер и Брайан Керниган |
Впервые появился | 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 представляет собой серию пар шаблонов действий, записанных как:
condition { action }
condition { action }
...
где условие обычно является выражением, а действие — серией команд. Ввод разбивается на записи, причем по умолчанию записи разделяются символами новой строки, так что ввод разбивается на строки. Программа поочередно проверяет каждую запись на соответствие каждому из условий и выполняет действие для каждого истинного выражения. Либо условие, либо действие можно опустить. По умолчанию условие соответствует каждой записи. Действием по умолчанию является печать записи. Это та же структура действий, что и в 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/ {
# Actions to perform in the event the record (line) matches the above regex_pattern
print 3+2
print foobar(3)
print foobar(variable)
print sin(3-2)
}
Вывод может быть отправлен в файл:
/regex_pattern/ {
# Actions to perform in the event the record (line) matches the above regex_pattern
print "expression" > "file name"
}
или через трубу :
/regex_pattern/ {
# Actions to perform in the event the record (line) matches the above regex_pattern
print "expression" | "command"
}
Встроенные переменные
[ редактировать ]Встроенные переменные 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
, имя функции, имена аргументов и тело функции. Вот пример функции.
function add_three (number) {
return number + 3
}
Это утверждение можно вызвать следующим образом:
(pattern) {
print add_three(36) # Outputs '''39'''
}
Функции могут иметь переменные, находящиеся в локальной области видимости. Их имена добавляются в конец списка аргументов, хотя их значения следует опускать при вызове функции. В списке аргументов перед локальными переменными принято добавлять пробелы , чтобы указать, где заканчиваются параметры и начинаются локальные переменные.
Примеры
[ редактировать ]Привет, мир!
[ редактировать ]Вот привычное «Привет, Мир!» программа, написанная на AWK:
BEGIN {
print "Hello, world!"
exit
}
Печатать строки длиной более 80 символов.
[ редактировать ]Выведите все строки длиной более 80 символов. Действием по умолчанию является печать текущей строки.
length($0) > 80
Подсчитайте слова
[ редактировать ]Подсчитайте слова во входных данных и выведите количество строк, слов и символов (например, wc ):
{
words += NF
chars += length + 1 # add one to account for the newline character at the end of each record (line)
}
END { print NR, words, chars }
Поскольку для первой строки программы нет шаблона, каждая строка ввода соответствует по умолчанию, поэтому действия по увеличению выполняются для каждой строки. words += NF
это сокращение от words = words + NF
.
Сумма последнего слова
[ редактировать ]{ s += $NF }
END { print 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 символов), а затем ее содержимое. Например, при выполнении на этом входе:
Rome Florence Milan Naples Turin Venice
Предыдущая программа печатает:
1 Rome 2 Florence 3 Milan 5 Turin 6 Venice
Печать начальной или конечной части файла
[ редактировать ]В частном случае, когда первая часть шаблона диапазона всегда истинна, например 1 , диапазон начинается с начала входных данных. Аналогично, если вторая часть всегда ложна, например 0 , диапазон будет продолжаться до конца ввода. Например,
/^--cut here--$/, 0
печатает строки ввода из первой строки, соответствующие регулярному выражению ^--cut here--$ , то есть строку, содержащую до конца только фразу "--cut here--".
Рассчитать частоту слов
[ редактировать ]Частота слов с использованием ассоциативных массивов :
BEGIN {
FS="[^a-zA-Z]+"
}
{
for (i=1; i<=NF; i++)
words[tolower($i)]++
}
END {
for (i in words)
print i, words[i]
}
Блок BEGIN устанавливает в качестве разделителя полей любую последовательность неалфавитных символов. Разделителями могут быть регулярные выражения. После этого мы переходим к простому действию, которое выполняет действие над каждой входной строкой. В этом случае для каждого поля в строке мы добавляем единицу к количеству раз, которое встречается это слово, сначала преобразованное в нижний регистр. Наконец, в блоке END мы печатаем слова с их частотностью. Линия
for (i in words)
создает цикл, который проходит по словам массива , устанавливая i для каждого нижнего индекса массива. Это отличается от большинства языков, где такой цикл проходит через каждое значение массива. Таким образом, цикл печатает каждое слово, за которым следует счетчик его частоты. tolower
был дополнением к One True awk (см. ниже), сделанным после публикации книги.
Сопоставить шаблон из командной строки
[ редактировать ]Эту программу можно представить несколькими способами. Первый использует оболочку Bourne для создания сценария оболочки, который делает все. Это самый короткий из этих методов:
#!/bin/sh
pattern="$1"
shift
awk '/'"$pattern"'/ { print FILENAME ":" $0 }' "$@"
The $pattern
в команде awk не защищен одинарными кавычками, поэтому оболочка расширяет переменную, но ее необходимо поместить в двойные кавычки, чтобы правильно обрабатывать шаблоны, содержащие пробелы. Сам по себе шаблон обычным способом проверяет, вся ли строка ( $0
) совпадения. FILENAME
содержит текущее имя файла. awk не имеет явного оператора конкатенации; две соседние строки объединяют их. $0
расширяется до исходной неизмененной строки ввода.
Есть альтернативные способы написания этого. Этот сценарий оболочки обращается к среде непосредственно из awk:
#!/bin/sh
export pattern="$1"
shift
awk '$0 ~ ENVIRON["pattern"] { print FILENAME ":" $0 }' "$@"
Это сценарий оболочки, который использует ENVIRON
, массив, представленный в новой версии One True awk после публикации книги. Индекс ENVIRON
— имя переменной среды; его результатом является значение переменной. Это похоже на функцию getenv в различных стандартных библиотеках и POSIX . Сценарий оболочки создает переменную среды pattern
содержащий первый аргумент, затем отбрасывает этот аргумент и заставляет awk искать шаблон в каждом файле.
~
проверяет, соответствует ли его левый операнд правому операнду; !~
является его обратным. Регулярное выражение представляет собой просто строку и может храниться в переменных.
Следующий способ использует присвоение переменных из командной строки, при котором аргумент awk можно рассматривать как присвоение переменной:
#!/bin/sh
pattern="$1"
shift
awk '$0 ~ pattern { print FILENAME ":" $0 }' "pattern=$pattern" "$@"
Или вы можете использовать -v var=value параметр командной строки (например, awk -v шаблон="$pattern" ... ).
Наконец, это написано на чистом awk, без помощи оболочки или без необходимости слишком много знать о реализации сценария awk (как это происходит при назначении переменной в командной строке), но оно немного длинное:
BEGIN {
pattern = ARGV[1]
for (i = 1; i < ARGC; i++) # remove first argument
ARGV[i] = ARGV[i + 1]
ARGC--
if (ARGC == 1) { # the pattern was the only thing, so force read from standard input (used by book)
ARGC = 2
ARGV[1] = "-"
}
}
$0 ~ pattern { print FILENAME ":" $0 }
The BEGIN
необходимо не только для извлечения первого аргумента, но и для предотвращения его интерпретации как имени файла после BEGIN
блок заканчивается. ARGC
, количество аргументов всегда гарантированно будет ≥1, поскольку ARGV[0]
— имя команды, выполнившей скрипт, чаще всего строка "awk"
. ARGV[ARGC]
пустая строка, ""
. #
инициирует комментарий, который расширяется до конца строки.
Обратите внимание на if
блокировать. awk только проверяет, следует ли ему читать данные из стандартного ввода, прежде чем запускать команду. Это означает, что
awk 'prog'
работает только потому, что факт отсутствия имен файлов проверяется только перед 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 / . - 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 г.
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Штутц, Майкл (19 сентября 2006 г.). «Начало работы с GAWK: основы языка AWK» (PDF) . РазработчикWorks . ИБМ . Архивировано (PDF) из оригинала 27 апреля 2015 г. Проверено 29 января 2015 г.
[AWK] часто называют языком, управляемым данными — операторы программы описывают входные данные, которые необходимо сопоставить и обработать, а не последовательность шагов программы.
- ^ Андреас Дж. Пилавакис (1989). UNIX-семинар . Международное высшее образование Макмиллана. п. 196.
- ^ Арнольд Роббинс (2015). Эффективное программирование на Awk: универсальная обработка текста и сопоставление с образцом (4-е изд.). О'Рейли Медиа. п. 560.
- ^ Jump up to: а б Джеймс В. Ливингстон (2 мая 1988 г.). «Великая программа awk — это не птичий мозг». Цифровой обзор . п. 91.
- ^ Рэймонд, Эрик С. «Применение мини-языков» . Искусство программирования для Unix . Практический пример: awk. Архивировано из оригинала 30 июля 2008 года . Проверено 11 мая 2010 г.
Язык действий awk является полным по Тьюрингу и может читать и записывать файлы.
- ^ Ахо, Альфред В .; Керниган, Брайан В .; Вайнбергер, Питер Дж. (1 сентября 1978 г.). Awk — язык сканирования и обработки шаблонов (второе издание) (технический отчет). Руководство по Unix, седьмое издание, том 2. Bell Telephone Laboratories, Inc. Проверено 1 февраля 2020 г.
- ^ Jump up to: а б Ахо, Альфред В.; Керниган, Брайан В.; Вайнбергер, Питер Дж. (1988). Язык программирования AWK . Издательство Аддисон-Уэсли. ISBN 9780201079814 . Проверено 16 мая 2015 г.
- ^ «Специальный выпуск UNIX: профессора Керниган и Брейлсфорд» . Компьютерфил . 30 сентября 2015 г. Архивировано из оригинала 22 ноября 2021 г.
- ^ «Единая спецификация UNIX, версия 3, таблица интерфейса утилит» . Архивировано из оригинала 05 января 2018 г. Проверено 18 декабря 2005 г.
- ^ «Глава 15. Команды и утилиты». Стандартная базовая базовая спецификация Linux 4.0 (технический отчет). Фонд Linux. 2008. Архивировано из оригинала 16 октября 2019 г. Проверено 01 февраля 2020 г.
- ^ Путеводитель по Вселенной для инсайдеров (PDF) . Charles River Data Systems, Inc., 1983. с. 13.
- ^ Jump up to: а б с Роббинс, Арнольд (март 2014 г.). «Проект GNU и я: 27 лет с GNU AWK» (PDF) . skeeve.com . Архивировано (PDF) из оригинала 6 октября 2014 г. Проверено 4 октября 2014 г.
- ^ Догерти, Дейл; Роббинс, Арнольд (1997). sed & awk (2-е изд.). Севастополь, Калифорния: О’Рейли. п. 221. ИСБН 1-565-92225-5 .
- ^ Гамильтон, Наоми (30 мая 2008 г.). «А-Я языков программирования: AWK» . Компьютерный мир . Архивировано из оригинала 01 февраля 2020 г. Проверено 12 декабря 2008 г.
- ^ Jump up to: а б «Записи (Руководство пользователя GNU Awk)» . Архивировано из оригинала 14 июня 2020 г. Проверено 23 мая 2020 г.
- ^ Керниган, Брайан В. (24–25 апреля 1991 г.). Переводчик AWK в C++ (PDF) . Конференция Usenix C++. Вашингтон, округ Колумбия. стр. 217–228. Архивировано (PDF) из оригинала 22 июня 2020 г. Проверено 01 февраля 2020 г.
- ^ «Журнал работы FreeBSD для импорта BWK awk в ядро FreeBSD» . 16 мая 2005 года. Архивировано из оригинала 8 сентября 2013 года . Проверено 20 сентября 2006 г.
- ^ «Обработка CSV с помощью gawk (с использованием расширения gawk-csv)» . gawkextlib . 2018. Архивировано из оригинала 25 марта 2020 г.
- ^ Джеймс К. Лоулесс (1 мая 1997 г.). «Изучение компилятора TAWK» . Журнал доктора Добба . Архивировано из оригинала 21 февраля 2020 года . Проверено 21 февраля 2020 г.
- ^ « Челюсть в SourceForge» . Архивировано из оригинала 27 мая 2007 г. Проверено 23 августа 2006 г.
- ^ « xgawk Домашняя страница » . Архивировано из оригинала 18 апреля 2013 г. Проверено 7 мая 2013 г.
- ^ «QSEAWK на GitHub» . Гитхаб . Архивировано из оригинала 11 июня 2018 г. Проверено 6 сентября 2017 г.
- ^ «CLAWK на GitHub» . Гитхаб . Архивировано из оригинала 25 августа 2021 г. Проверено 1 июня 2021 г.
Дальнейшее чтение
[ редактировать ]- Энди Орам (19 мая 2021 г.). «Awk: сила и перспективы 40-летнего языка» . Фосслайф . Проверено 9 июня 2021 г.
- Гамильтон, Наоми (30 мая 2008 г.). «А-Я языков программирования: AWK» . Компьютерный мир . Проверено 12 декабря 2008 г. – Интервью с Альфредом В. Ахо на AWK
- Роббинс, Дэниел (1 декабря 2000 г.). «Awk на примере, Часть 1: Знакомство с великим языком со странным названием» . Общие темы . IBM DeveloperWorks . Проверено 16 апреля 2009 г.
- Роббинс, Дэниел (1 января 2001 г.). «Awk на примере, часть 2: записи, циклы и массивы» . Общие темы . IBM DeveloperWorks . Проверено 16 апреля 2009 г.
- Роббинс, Дэниел (1 апреля 2001 г.). «Awk на примере, Часть 3: Строковые функции и… чековые книжки?» . Общие темы . IBM DeveloperWorks. Архивировано из оригинала 19 мая 2009 года . Проверено 16 апреля 2009 г.
- AWK – Станьте экспертом за 60 минут
- Единая спецификация UNIX , версия 4 от The Open Group : язык сканирования и обработки шаблонов — Справочник по оболочке и утилитам,
- Linux пользователя Руководство – Пользовательские команды –
Внешние ссылки
[ редактировать ]- «Удивительный ассемблер Awk» Спенсера Генри .
- AWK в Керли
- awklang.org Сайт, посвященный языку awk.
- программное обеспечение 1977 года
- Кроссплатформенное программное обеспечение
- Специализированные языки программирования
- Бесплатные компиляторы и интерпретаторы
- Языки программирования сопоставления шаблонов
- Команды Плана 9
- Языки программирования, созданные в 1977 году.
- Языки сценариев
- Стандартные программы Unix
- Текстоориентированные языки программирования
- Утилиты Unix SUS2008
- Утилиты обработки текста Unix