The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Интерактивная система просмотра системных руководств (man-ов)

 ТемаНаборКатегория 
 
 [Cписок руководств | Печать]

awk (8)
  • awk (1) ( Solaris man: Команды и прикладные программы пользовательского уровня )
  • awk (1) ( FreeBSD man: Команды и прикладные программы пользовательского уровня )
  • awk (1) ( Русские man: Команды и прикладные программы пользовательского уровня )
  • awk (1) ( Linux man: Команды и прикладные программы пользовательского уровня )
  • awk (1) ( POSIX man: Команды и прикладные программы пользовательского уровня )
  • >> awk (8) ( Русские man: Команды системного администрирования )
  • Ключ awk обнаружен в базе ключевых слов.
  • {{Wikify}} {{Stub}}

     

    Имя

    gawk - язык сканирования и обработки шаблонов

     

    Синтаксис

    gawk [ опции в стиле POSIX или GNU ] -f program-file [ -- ] file ... gawk [ опции в стиле POSIX или GNU ] [ -- ] program-text file ... pgawk [ опции в стиле POSIX или GNU ] -f program-file [ -- ] file ... pgawk [ опции в стиле POSIX или GNU ] [ -- ] program-text file ...

     

    Описание

    Gawk это GNU реализация языка программирования AWK. Она совместима с определением языка в стандарте POSIX 1003.2 "Command Language And Utilities Standard". Эта версия в свою очередь базируется на описании "The AWK Programming Language" Э.Ахо, Б.Кернигана и П.Вайнбергера, с дополнительными возможностями найдеными в System V Release 4 версии UNIX awk. Gawk также поддерживает расширения для AWK компании Bell Laboratories, и множество расширений специфичных для GNU. Pgawk это профильная версия gawk. Она идентична gawk, за исключением того, что запускается намного медленее , и автоматически создает профиль выполнения в файле awkprof.out, при успешном выполнении. Смотриие также опцию --profile. Командная строка состоит из опций для gawk, текста программы AWK (если не указаны опции -f или --file, и значения которые будут доступны через предопределенные переменные ARGC и ARGV языка AWK.  

    Опции

    {--field-separator fs | -F fs}

     Эта опция устанавливает разделитель fs в качестве разделителя полей в записи (это значение предустановленной  переменной FS).
    {--assign var=val | -v var=val}

     Присваивает значение val переменной var, перед выполнением программы. Такие переменные доступны в блоке  BEGIN AWK программы .
    {--file program-file | -f program-file}

     Читает исходный код AWK программы из файла program-file, instead of from the first command line argument. Разрешается  множественное использование опции.
    {-mf NNN | -mr NNN}

     Установка различных ограничений памяти в значение NNN. Флаг f устанавливает максимальное число записей,  а флаг r максимальный размер записи. Эти два флага и опция -m позаимствованы из Bell Laboratories research версии awk Unix. Они игнорируются gawk, так как gawk не имеет никаких предопределенных ограничений.
    {--compat | -W compat | -W traditional | --traditional}

     Запуск в режиме совместимости. В режиме совместимости, gawk ведет себя идентично с Unix awk; не поддерживая расширения  GNU. Ипользование опции --traditional, предпочтительнее других ее форм.
    {--copyleft| -W copyleft | --copyright | -W copyright }

     Выводит краткую версию сообщения информации об авторских правах GNU на стандартный вывод и завершает работу. 
    {--dump-variables[=file] | -W dump-variables[=file]}

     Выводит краткий список глобальных переменных, их типов и окончательных значений в файл file. Если файл не указан,  gawk использует файл с именем awkvars.out в текущей директории. Иметь список всех глобальных переменных - это хороший метод обнаружить ошибку в Вашей программе. Вы должны также использовать эту опцию, если есть большая программа с большим количеством функций, и Вы хотите убедиться, что Ваши функции неосторожно не используют глобальные переменные, которые должны быть локальными.
    {--help | -W help | --usage | -W usage}

     Выводит на стандартный вывод относительно короткое резюме доступных опций.

    {--lint[=value] | -W lint[=value]}

     Выдает предупреждения о сомнительных или непортируемых конструкциях в другие AWK реализации. С дополнительным аргументом  fatal, предупреждения становятся критическими ошибками. Эта опция не обязательна, но ее использование приведет к развитию более "чистых" AWK программ. С дополнительным аргументом invalid, будут выдаваться только предупреждения о вещах, которые являются фактически недействительными.
    {--lint-old | -W lint-old }

     Выводит предупреждения о конструкциях которые не совместимы с оригинальной версией Unix awk.

    {--gen-po | -W gen-po}

     Сканирует программу AWK, и выводит сгенерированый файл в формате GNU .po на стандартный вывод с вхождениями для  всех локализированых строк в программе. Сама программа останется не выполнена. Смотрите GNU gettext(1) для получения более детальной информации о .po файлах.
    {--non-decimal-data | -W non-decimal-data}

     Распознает восьмиричные и шестнадцатеричные значения во входящих данных.  Используйте эту опцию с большим предостережением!

    {--posix | -W posix}

     Включает режим совместимости, с дополнительными ограничениями:

      *  не распознаются escape-последоавтельности \x .

      *  Только пробел и табуляция действуют как поле разделитель, когда FS установлена в одиночный пробел, символ новой  строки - нет. .br
      *  Вы не можете продолжать строку после символов ? и :.

      *  Не распознается синоним func для ключевого слова function.

      *  Операторы ** и **= не могут использоваться вместо ^ и ^ =.

      *  Функция fflush() недоступна.

    {--profile[=prof_file] | -W profile[=prof_file] }

     Отправить профильные данные в файл prof_file. Если не указано иное, то по умолчанию в файл с именем  awkprof.out.  Если запускается gawk, в файле содержится "правильно форматированная" версия программы. Если запускается pgawk, то профильные данные содержат счетчики выполнения каждого утверждения в программе в левой части и счетчик вызова функции для каждой определенной пользователем функции.
    {--re-interval | -W re-interval}

     Enable the use of interval expressions in regular expression matching (see Regular Expressions, below).  Interval  expressions 
     were not traditionally available in the AWK language.  The POSIX standard added them, to make awk and egrep consistent with  each other. However, their use is likely to break old AWK programs, so gawk only provides them if they are requested with this option, or when --posix is specified.
    {--source program-text | -W source program-text}

     Использовать program-text как исходный код программы AWK. Эта опция разрешает простое объединение библиотечных  функций (подключаемых с помощю опций --file_program-file и --file_program-file с исходным кодом в командной строке. Это предназначено прежде всего для средних и больших AWK программ используемых в скриптах коммандной оболочки.

    { --version | -W version}}

     Выводит информацию о версии.

    --

     Сигнализирует про окончание опций. Это полезно, если дальнейшие аргументы для программы AWK непосредственно начинаются  с символа "-". This is mainly for consistency with the argument parsing convention used by most other POSIX programs. In
     compatibility  mode, any other options are flagged as invalid, but are otherwise ignored.  In normal operation, as long as  program text has been supplied, unknown options are passed on to the AWK program in the ARGV array for processing. This is particularly useful for running AWK programs via the "#!" executable interpreter mechanism.
     

    Выполнение AWK программы

     

    Переменные, записи и поля

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

    Записи

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

    Поля

    Каждую входящую запись gawk разбивает на поля, используя значение переменной FS в качестве разделителя. Если значение FS - единичный символ, то поля разделяются этим символом. Если значение FS - пустая строка, то каждый символ считается отдельным полем. В противном случае, FS считается полным регулярным выражением. Исключение составляет случай, когда значение FS - один пробел. При этом поля разделяются комбинациями пробелов и/или символов табуляции, и/или символами новой строки. (Смотрите также опцию --posix.) Заметьте, что значение IGNORECASE также будет влиять на разделение полей, если FS - регулярное выражение, и на разделение записей, если RS - регулярное выражение. Если переменная FIELDWIDTHS содержит список чисел, разделенных пробелами, то gawk считает ширину каждого поля фиксированной и разделяет запись в соответствие c указанными значениями. Значение переменной FS в этом случае игнорируется. Присваивание нового значения переменной FS аннулирует использование FIELDWIDTHS и восстанавливает поведение, принятое по умолчанию. На любое поле входящей записи можно ссылаться по его позиции - $1, $2, и так далее. $0 ссылается на всю входящюю запись. Кроме того, любому полю можно присвоить значение. Для ссылок на поля необязательно использовать константы. Например:

     n = 5
     print $n 
    
    
    выведет пятое поле записи. Переменная NF содержит количество полей входной записи.

    Результатом ссылки на несуществующее поле (т. е. поле с номером, превышающим $NF является пустая строка. Присваивание значения несуществующему полю (например, $(NF+2) = 5) увеличивает значение NF и создает промежуточные поля с пустой строкой в качестве значения. Содержимое переменной OFS используется в качестве разделителя полей. Значение $0 вычисляется заново. Ссылка на поля с отрицательными номерами является ошибкой. Уменьшение значения NF вызывает потерю значений полей с номерами, превышающими новое значение. Значение $0 вычисляется заново, поля разделяются содержимым переменной OFS.  

    Встроенные переменные

    Gawk имеет следующие встроенные переменные:

    ARGC

     Число аргументов командной строки (не включая опции gawk, или исходный код).

    ARGIND

     Индекс массива ARGV, указывающий на обрабатываемый в данный момент файл.

    ARGV

     Массив аргументов командной строки. Массив ARGV имеет индексы от 0 до ARGC - 1.

    BINMODE

    CONVFMT

     Формат преобразования для чисел. По умолчанию "%.6g".

    ENVIRON

     Массив содержащий значения текущих переменных окружения. Индекс массива это название переменной, каждый элемент содержит  значение соответствующей переменной окружения (например, ENVIRON["HOME"] может иметь значение /home/alexey). Изменение содержимого этого массива не влияет на значения переменных окружения, доступных для программам, запускаемыми из gawk с помощью функции system().
    ERRNO

     Если возникает системная ошибка при перенаправлении для getline, при чтении для getline, или при вызове  close(), то ERRNO будет содержать строку, которая описывает ошибку.
    FIELDWIDTHS

     Список длин полей, разделенный пробелами. Если этой переменной присваивается новое значение, то gawk разделяет  входные данные на поля фиксированной длины, при этом значение переменной FS игнорируется.
    FILENAME

     Имя файла, обрабатываемого в данный момент. Если в командной строке не было указано ни одного файла, то значение FILENAME  равно "-". Однако, в блоке BEGIN переменная FILENAME не определена (если не установлено getline).
    FNR

     Номер входной записи в текущем входном файле.

    FS

     Разделитель полей во входном потоке, по умолчанию пробел. Смотрите также Поля.

    IGNORECASE

     Контролирует зависимость всех регулярных выражений и строковых операций от регистра. Если значение IGNORECASE  не равно нулю, то при работе с регулярными выражениями регистр будет игнорироваться в следующих случаях: .RS
    * при сравнении строк и проверке шаблонов в правилах;


    * при разделении на поля с использованием значения FS;


    * при разделении на записи с использованием значения RS;


    * в регулярных выражениях c ~ и !~;


    * во встроенных функциях gensub(), gsub(), index(), match(), split() и sub().

    Таким образом, если значение IGNORECASE не равно нулю, то /aB/ совпадет с любой строкой из "ab", "aB", "Ab" или "AB". Как и у всех переменных AWK, начальное значение IGNORECASE равно 0, так что все операции со строками и регулярными выражениями изначально чувствительны к регистру. В Unix при игнорировании регистра используется полный набор символов ISO 8859-1 Latin-1. С gawk версии 3.1.4, сравнение символов полностью совметимо с локалью, основано на библиотечных (<ctype.h>) функциях языка C isalpha(3) и tolupper(3).

    LINT

     Предоставляет динамическое управление опцией --lint из AWK программы. Если ее значение истина, то gawk  выводит предупреждения, если ложь то нет. Ели присвоить этой переменной строковое значение "fatal", пердупреждения станут критическими ошибками, аналогично --lint=fatal. Любое другое истиное значение означает вывод предупреждений.

    NF

     Количество полей в текущей входной записи.

    NR

     Общее количество встреченных записей.

    OFMT

     Формат вывода для чисел. По умолчанию "%.6g".

    OFS

     Разделитель полей в выходном потоке, по умолчанию пробел.

    ORS

     Разделитель выходных записей. По умолчанию символ новой строки.

    PROCINFO

     Элементы этого массива предоставляют доступ к информации о запущенной AWK программе. В некоторых системах, это могут  быть элементы в массиве, от "group''1" до "group''n''" для некоторых n'', которые являются числом групп которые содержит процесс. Используйте оператор in для проверки этих элементов. Следующие элементы гарантировано будут доступны: .br
      * PROCINFO["egid"] - значение возвращаемое системным вызовом getegid(2).

      * PROCINFO["euid"] - значение возвращаемое системным вызовом geteuid(2).

      * PROCINFO["FS"]- "FS" если поля разделяются FS, или "FIELDWIDTHS" если поля разделяются  FIELDWIDTHS. .br
      * PROCINFO["gid"] - значение возвращаемое системным вызовом getgid(2).

      * PROCINFO["pgrpid"] - идентификатор группы процессов для текущего процесса.

      * PROCINFO["pid"] - идентификатор текущего процесса.

      * PROCINFO["ppid"] - идентификатор родителя текущего процесса.

      * PROCINFO["uid"]- значение возвращаемое системным вызовом getuid(2)''.

      * PROCINFO["version"] - версия gawk.

    RS

     Разделитель входных записей. По умолчанию символ новой строки.

    RT

     Конец записи. Gawk присваивает RT значение входного текста, совпавшего с символом или регулярным выражением,  содержащимся в RS.
    RSTART

     Индекс первого символа, совпавшего при вызове match(). 0, если совпадения не было.

    RLENGTH

     Длина строки, совпавшей при вызове match(). -1, если совпадения не было.

    SUBSEP

     Символ, используемый для разделения элементов в массиве. По умолчанию "\034".

    TEXTDOMAIN

     Домен для программы AWK; используется для поиска локализированого перевода строк программы.

     

    Массивы

    Массивы индексируются по выражению, указанному между квадратными скобками ([ и ]). Если выражение это списком выражений (выражение, выражение ...), то массив индексируется по строке, состоящей из сцепленных (строковых) значений всех выражений, разделенных значением переменной SUBSEP. Эта возможность используется для моделирования многомерных массивов. Например:

     i = "A"; j = "B"; k = "C"
     x[i, j, k] = "hello, world\n" 
    
    
    присваивает элементу массива x, индексированного по строке "A\034B\034C", строку "hello, world\n". Все массивы в AWK ассоциативны, т.е. индексируются по строковым значениям. Для проверки существования в массиве определенного индекса в операторах if и while может быть использован специальный оператор in.
     if (val in array)
         print array[val]
    
    
    Если массив многомерный, используйте:

     (i, j) in array.
    
    
    Конструкция in может быть также использована в цикле for для перебора всех элементов массива. Элемент может быть удален из массива оператором delete. Кроме того, оператор delete может быть использован для удаления всего массива. Для этого нужно указать имя массива без индекса.  

    Типы переменных и преобразования

    Переменные и поля могут быть числами с плавающей запятой, строками или и тем, и другим одновременно. Тип переменной зависит от контекста. В числовых выражениях переменная считается числом, в строковых - строкой. Если вы хотите, чтобы переменная считалась числом, добавьте к ней 0. Если вы хотите, чтобы переменная считалась строкой, сцепите ее с пустой строкой. Конвертирование строки в число производится с помощью atof(3). Конвертирование числа в строку производится с помощью sprintf(3), путем использования значения CONVFMT в качестве строки форматирования, и числового значения переменной в качестве аргумента. Хотя все числа в AWK считаются числами с плавающей запятой, целые значения всегда преобразуются как целые. Поэтому в

     CONVFMT = "%2.2f"
     a = 12
     b = a ""
    
    
    строковое значение переменной b будет "12", а не "12.00".

    Gawk выполняет сравнения следующим образом:

      * если две переменные имеют числовое значение, то они сравниваются как числа;

      * если одна переменная имеет числовое значение, а вторая является "строкой-числом" (т.е. строкой, состоящей из цифр),  то переменные сравниваются как числа. Во всех остальных случаях производится преобразование числа в строку, и переменные сравниваются как строки. Две строки, естественно, сравниваются как строки. В соответствие со стандартом POSIX, даже если две строки являются "строками-числами", то они сравниваются как числа. Но это, безусловно, неправильно, поэтому gawk не делает этого. Заметьте, что строковые константы, такие как "57", не являются "строками-числами", а именно строковыми константами. Термин "строка-число" применим лишь к полям, входным данным getline, FILENAME, элементам ARGV, элементам ENVIRON и тем элементам массива, созданного split, которые являются числовыми строками. Основная идея в том, что таким образом интерпретируется только входная информация пользователя, выглядящая, как число. Переменные, неинициализированные явно, имеют числовое значение 0 и строковое значение "" (пустая строка).

     

    Восьмиричные и шестнадцатиричные константы

     

    Строковые константы

     

    Шаблоны и действия

     

    Шаблоны

     

    Регулярные выражения

     

    Действия

     

    Операторы

     

    Управляющие последовательности

     

    Операторы ввода/вывода

    Имеются следующие операторы ввода/вывода:

    close(filename)

     Закрыть файл или канал с именем filename.

    getline

     Считать следующую входящую запись в $0, установить NFNRFNR.

    getline <file

     Считать следующую входящую запись файла file в $0, установить NF.

    getline var

     Считать следующую входящую запись в переменную var, установить NRFNR.

    getline var <file

     Считать следующую входящую запись файла file в переменную var, установить NRFNR
    next

     Прекратить обработку текущей входящей записи, cчитать следующую входящую запись и начать ее обработку с первого шаблона  программы AWK. Если обработаны все входящие данные, то выполнить блок(и) END, если они существуют.
    nextfile

     Прекратить обработку текущего входящего файла, следующая входящая запись считывается со следующего входящего файла.  Обновляются переменные FILENAME и ARGIND, FNR устанавливается в 1, обработка начинается с первого шаблона программы AWK. Если обработаны все входящие данные, то выполнить блок(и) END, если они существуют.

    В ранних версиях gawk использовалась конструкция next file. Хотя эта конструкция все еще распознается, выдается предупреждающее сообщение. В дальнешем она поддерживаться не будет.

    print

     Вывести текущую запись. Запись оканчивается содержимым переменной ORS.

    print expr-list

     Вывести выражение. Выражения разделяются содержимым переменной OFS. Запись оканчивается содержимым переменной ORS

    print expr-list >file

     Вывести выражения в файл file.

    printf fmt, expr-list

     Отформатировать и вывести выражения.

    printf fmt, expr-list >file

     Отформатировать и вывести выражения в файл file.

    system(cmd-line)

     Выполнить команду cmd-line и вернуть код завершения команды. (Может быть недоступна на не-POSIX системах.) 

    fflush([file])

     Сбросить буфера, связанные с открытым для записи файлом или каналом file. Если файл не указан, происходит сброс  буферов стандартного потока вывода. Если файл - пустая строка, то происходит сброс буферов всех открытых файлов и каналов.

     

    The printf Statement

     

    Специальные имена файлов

     

    Арифметические функции

     

    Строковые функции

     

    Функции для работы со временем

     

    Функции для манипуляции с битами

     

    Функции интернационализации

     

    Функции определяемые пользователем

     

    Динамическая загрузка новых функций

     

    Сигналы

    pgawk принимает 2 вида сигналов. SIGUSR1 заставляет его сбросить профиль и стек вызовов функций в файл профиля, который называется awkprof.out, либо имя, указанное в опции --profile. Далее выполнение продолжается. SIGHUP заставляет его сбросить профиль и стек вызовов функций и затем выйти.  

    Примеры

    Напечатать и отсортировать логины всех пользователей:

     BEGIN     { FS = ":" }
          { print $1 | "sort" }
    
    
    Сосчитать количество строк в файле:

          { nlines++ }
     END  { print nlines }
    
    
    Предварить каждую строку её номером в файле:

     { print FNR, $0 }
    
    
    Объединить и пронумеровать (вариация на тему):

     { print NR, $0 }
    
    
    Запустить внешнюю команду для определенных строк данных:

     tail -f access_log |
     awk '/myhome.html/ { system("nmap " $1 ">> logdir/myhome.html") }'
    
    

     

    Интернационализация

    Строковые константы это последовательность символов, заключенных в двойные кавычки. В не-англоязычной языковой среде, можно помечать строки в тексте программы AWK как требующие перевода на местный язык. Такие строки помечаются подчеркиванием перед строкой ("_"). Например,

     gawk 'BEGIN { print "hello, world" }'
    
    
    всегда напечатает "hello, world". Но,

     gawk 'BEGIN { print _"hello, world" }'
    
    
    должно напечатать "привер, мир" в России.

    Чтобы создать и запустить локализованную AWK программу, нужно сделать несколько шагов:

    1. Добавьте действие BEGIN, чтобы присвоить значение переменной TEXTDOMAIN, чтобы установить текстовую область, связанную с именем вашей программы.

     BEGIN { TEXTDOMAIN = "myprog" }
    
    
    Это позволит gawk найти файл .mo, связанный с вашей программой. Без этого шага, gawk будет использовать текстовую облать сообщений, которая наверняка не содержит перевода для вашей программы. 2. Пометьте все строки, нуждающиеся в переводе, лидирующим знаком подчеркивания.

    3. Если нужно, используйте функции dcgettext() и/или bindtextdomain() в вашей программе.

    4. Выполните

     gawk --gen-po -f myprog.awk > myprog.po
    
    
    чтобы создать .po-файл для вашей программы.

    5. Сделайте нужные переводы и сделайте и установите соответствующий .mo-файл.

    Более подробно процесс интернационализации описан в [http://www.gnu.org/manual/gawk GAWK: Effective AWK Programming] (GAWK: Эффективное программирование на AWK).  

    Posix совмесимость

    Главная задача для gawk - совместимость как с POSIX стандартом, так и с последней версией UNIX awk. Для этого, gawk включает в себя следующие функции, не описанные в Книге AWK, но входящие в Bell Laboratories версию awk, и имеющиеся в стандарте POSIX. В книге сказано, что присваивание значений переменным, указанным в командной строке, происходит перед открытием awk файла, что происходит после выполнения блока BEGIN. Однако в ранних реализациях, если такое присваивание значений переменным было указано до имен файлов, присваивание происходило до выполнения блока BEGIN. Эта "возможность" стала применяться в приложениях. После того, как awk был приведен в соответствие с документацией, для удовлетворения нужд приложений, зависимых от старого поведения, была добавлена опция -v. (С введением этой возможности согласились как разработчики AT&T, так и GNU.) Опция -W для реализации особенностей взята из стандарта POSIX.

    При обработке аргументов gawk использует специальную опцию -- для указания конца аргументов. В режиме совместимости будет выдаваться предупреждение о существовании неизвестных опций, но они будут игнорироваться. В обычном режиме такие аргументы передаются для обработки программе AWK. В соответствие с книгой по AWK, значение, возвращаемое srand(), не определено. В стандарте POSIX возвращается предыдущее значение, что позволяет следить за последовательностью случайных чисел. Поэтому srand() в gawk также возвращает значение текущей базы. Другие новые возможности: использование нескольких опций -f (из MKS awk); массив ENVIRON; экранирующие последовательности \a и \v (изначально появившиеся в gawk и затем включенные в AT&T); функции tolower() и toupper() (из AT&T); параметры форматирования ANSI C printf (впервые появившиеся в версии AT&T).  

    Исторические возможности

    Есть две функции исторических реализаций AWK, которые поддерживает gawk. Во-первых, можно вызывать встроенную функцию length() не только без аргументов, но и без скобок! Соответственно,

     a = length     # Holy Algol 60, Batman!
    
    
    то же самое, что и любая строчка из

     a = length()
     a = length($0)
    
    
    Эта функция помечена в POSIX стандарте как "осуждаемая", и gawk выдает предупреждение при её использовании, если в командной строке указана опция --lint. Другая функция - использование операторов continue либо break вне тела циклов while, for или do. Традиционные реализации AWK трактовали такое использование как эквивалент оператора next. Gawk поддерживает такое использование, если указана опция --traditional.  

    Расширения GNU

    Gawk имеет некоторые расширения по сравнению с POSIX-версией awk. Они описаны в этом разделе. Все эти расширения могут быть отключены вызовом gawk с опцией --traditional. Следующие функции gawk отсутствуют в POSIX awk.



      * Не производится поиск по пути файлов, указанных через опцию -f. Как следствие, переменная окружения AWKPATH  не имеет специального значения. .br
      * Экранирующая последовательность \x. (Отключается при использовании --posix.)

      * Функция fflush(). (Отключается при использовании --posix.)

      * Возможность продолжать строку после ? и :. (Отключается при использовании --posix.)

      * Восьмеричные и шестнадцатиричные константы в AWK программах.

      * Переменные ARGINDBINMODEERRNOLINTRT и TEXTDOMAIN не являются особыми. 

      * Не обрабатывается переменная IGNORECASE.

      * Переменная FIELDWIDTHS и разделение на поля с фиксированной шириной.

      * Отсутствует массив PROCINFO.

      * Использование RS как регулярных выражений.

      * Специальные имена файлов для перенаправления ввода/вывода не распознаются.

      * Оператор |& для создания со-процессов.

      * Возможность разделения на отдельные символы путем присваивания пустого значения переменной FS или третьему  аргументу split(). .br
      * Необязательный второй аргумент функции close().

      * Необязательный третий аргумент функции match().

      * Возможность использовать позиционные спецификаторы в printf и sprintf().

      * Использование <TT>delete массив</TT> чтобы удалить всё содержимое массива.

      * Использование nextfile для прерывания обработки текущего входного файла.

      * Функции and()asort()asorti()bindtextdomain()compl()dcgettext()dcngettext(), gensub(), lshift(), mktime(), or(), rshift(), strftime(), strtonum(), systime() и xor(). .br
      * Локализуемые строки.

      * Динамическое добавление новых встроенных функций с помощью функции extension().

    Книга AWK не определяет возвращаемое значение функции close(). Версия gawk возвращает значение, полученное от fclose(3), или pclose(3), когда закрывается выходной файл или канал, соответственно. Она возвращает выходное значение процесса, когда закрывается входной канал. Возвращаемое значение равно -1, если файл, канал или со-процесс не были открыты с перенаправлением. Если при запуске gawk с опцией --traditional, аргумент fs опции -F имеет значение "t", то значением FS будет символ табуляции. Заметьте, что .RS

    gawk -F\t ...
    

     приведет лишь к экранированию символа "t", а не к передаче "\t" опции -F. Так как это довольно специфический  случай, то он не является поведением по умолчанию. Он также не будет работать, если указана опция --posix. Если вам действительно нужно использовать символ табуляции в качестве разделителя полей, то лучше всего воспользоваться кавычками: .RS
    gawk -F'\t' ...
    

    Если при установке gawk была указана опция --enable-switch команде configure, тогда gawk понимает дополнительный оператор управления:

     switch (expression) {
     case value|regex : statement
     ...
     [ default: statement ]
     }
    
    

     

    Переменные окружения

    Переменная окружения AWKPATH может быть использована для указания списка директорий, в которых gawk ищет файлы, указанные в опциях -f и --file. Если в переменных окружения присутствует POSIXLY_CORRECT, тогда gawk ведет себя, как если бы опция --posix была указана в командной строке. Если указана опция --lint, gawk выдает предупреждающее сообщение о таком эффекте.  

    Смотрите также

     

    Ошибки

    The -F option is not necessary given the command line variable assignment feature; it remains only for backwards compatibility.

    Syntactically invalid single character programs tend to overflow the parse stack, generating a rather unhelpful message.
     Such programs are surprisingly difficult to diagnose in the completely general case, and the effort to do so really is not  worth it.  

    Авторы

    The original version of UNIX awk was designed and implemented by Alfred Aho, Peter Weinberger, and Brian Kernighan of Bell Laboratories. Brian Kernighan continues to maintain and enhance it.

    Paul Rubin and Jay Fenlason, of the Free Software Foundation, wrote gawk, to be compatible with the original version of awk distributed in Seventh Edition UNIX. John Woods contributed a number of bug fixes. David Trueman, with contributions from Arnold Robbins, made gawk compatible with the new version of UNIX awk. Arnold Robbins is the current maintainer.

    The initial DOS port was done by Conrad Kwok and Scott Garfinkle. Scott Deifik is the current DOS maintainer. Pat Rankin did the port to VMS, and Michal Jaegermann did the port to the Atari ST. The port to OS/2 was done by Kai Uwe Rommel, with contributions and help from Darrel Hankerson. Fred Fish supplied support for the Amiga, Stephen Davies provided the Tandem port, and Martin Brown provided the BeOS port.

     

    Версия

    Это руководство описывает gawk, версии 3.1.4.

     

    Перевод



      *  Игорь Чубин <igor ar chub.in>


     

    Index

    Имя
    Синтаксис
    Описание
    Опции
    Выполнение AWK программы
    Переменные, записи и поля
    Записи
    Поля
    Встроенные переменные
    Массивы
    Типы переменных и преобразования
    Восьмиричные и шестнадцатиричные константы
    Строковые константы
    Шаблоны и действия
    Шаблоны
    Регулярные выражения
    Действия
    Операторы
    Управляющие последовательности
    Операторы ввода/вывода
    The printf Statement
    Специальные имена файлов
    Арифметические функции
    Строковые функции
    Функции для работы со временем
    Функции для манипуляции с битами
    Функции интернационализации
    Функции определяемые пользователем
    Динамическая загрузка новых функций
    Сигналы
    Примеры
    Интернационализация
    Posix совмесимость
    Исторические возможности
    Расширения GNU
    Переменные окружения
    Смотрите также
    Ошибки
    Авторы
    Версия
    Перевод


    Поиск по тексту MAN-ов: 




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру