Научете командата Linux - gawk

име

gawk - шаблон за сканиране и обработка

резюме

gawk [опции за POSIX или GNU стил] -f файл с програмни файлове [ - ] ...
gawk [опции за POSIX или GNU стил] [ - ] програмен текстов файл ...

pgawk [POSIX или GNU стил опции] -f програма-файл [ - ] файл ...
pgawk [опции за POSIX или GNU стил] [ - ] програмен текстов файл ...

описание

Gawk е реализацията на програмния език AWK на проекта на GNU . Той отговаря на определението за езика в стандарта POSIX 1003.2 Command Language and Utilities Standard. Тази версия от своя страна се основава на описанието в програмния език AWK , от Aho, Kernighan и Weinberger, с допълнителните функции, открити в версията System UN Release 4 на UNIX awk . Gawk също така предоставя по-новите разширения на Bell Laboratories awk и редица разширения, специфични за GNU.

Pgawk е профилиращата версия на Gawk . Той е идентичен по всякакъв начин, за да проблясва , с изключение на това, че програмите се изпълняват по-бавно и автоматично създава профил за изпълнение във файла awkprof.out, когато е готов. Вижте опцията - профил, по-долу.

Командният ред се състои от опции за самоуправление , текста на програмата AWK (ако не е предоставен чрез опциите -f или -file ) и стойностите, които трябва да бъдат предоставени в предварително зададените променливи AWK ARGC и ARGV .

Формат на опциите

Обезпечените опции могат да бъдат традиционни POSIX опции с една буква или опции с дълъг стил на GNU. POSIX опциите започват с един `` - '', докато дългите опции започват с `` - ''. Предлагат се дълги опции както за специфичните за GNU функции, така и за функциите, дефинирани от POSIX.

Следвайки стандарта POSIX, специфичните опции се доставят чрез аргументи на опцията -W . Могат да се доставят опции с множество W. Всяка опция -W има съответната дълга опция, както е описано по-долу. Аргументите за дългите опции или се свързват с опцията с a = sign, без интервали, или могат да бъдат предоставени в следващия аргумент на командния ред. Дългите опции могат да бъдат съкратени, стига съкращението да остане уникално.

Настроики

Gawk приема следните опции, изброени по азбучен ред.

-F fs

- field-separator fs Използвайте fs за сепаратора на полета за въвеждане (стойността на предварително дефинираната променлива FS ).

-v var = val

- assign var = val Задайте стойността val на променливата var , преди да започне изпълнението на програмата. Такива променливи стойности са достъпни за блока BEGIN на програмата AWK.

-f програмен файл

- file-file file Прочетете източника на програмата AWK от файловата програма , вместо от първия аргумент на командния ред. Могат да се използват опции с множество -f (или --file ).

-mf NNN

-m NNN Задайте различни граници на паметта до стойността NNN . Ф флаговето определя максималния брой полета, а флагът r определя максималния размер на записа. Тези два знамена и опцията -m са от изследователската версия на Bell Laboratories на UNIX awk . Те са пренебрегнати от очите , тъй като gawk няма предварително дефинирани граници.

-W compat

-W традиционен

--compat

- традиционно изпълнение в режим на съвместимост . В режим на съвместимост, Gawk се държи идентично с UNIX awk ; нито едно от разширенията, специфични за GNU, не се разпознава. Използването на - традиционен е за предпочитане пред другите форми на тази опция. Вижте GNU EXTENSIONS , по-долу, за повече информация.

-W copyleft

-W авторско право

--copyleft

--copyright Отпечатайте кратката версия на съобщението за авторски права на GNU на стандартния изход и излезте успешно.

-W променливи променливи [ = файл ]

--dump-variables [ = file ] Отпечатва сортиран списък на глобалните променливи, техните типове и крайни стойности във файл . Ако няма файл , gawk използва файл с име awkvars.out в текущата директория.

Да имате списък на всички глобални променливи е добър начин да търсите типографски грешки във вашите програми. Можете също да използвате тази опция, ако имате голяма програма с много функции и искате да сте сигурни, че вашите функции не използват по невнимание глобалните променливи, които сте искали да бъдат местни. (Това е особено лесно да се направи с прости имена на променливи като i , j и т.н.)

-W помощ

-W използване

--помогне

-usage Отпечатайте сравнително кратко резюме на наличните опции на стандартния изход. (По стандартите за кодиране на GNU , тези опции причиняват незабавен и успешен изход.)

-W палто [ = фатално ]

--lint [ = fatal ] Предоставяне на предупреждения за конструкции, които са съмнителни или не преносими за други реализации на AWK. С допълнителен аргумент за фатални предупреждения за мъх стават фатални грешки. Това може да е драстично, но употребата му със сигурност ще насърчи разработването на по-чисти програми на АУК.

-W стари

-lint-old Предоставяне на предупреждения за конструкти, които не са преносими към оригиналната версия на Unix awk .

-W gen-po

- gen-po Сканиране и анализ на програмата AWK и генериране на файл на формат GNU .po на стандартен изход със записи за всички локализиращи струни в програмата. Самата програма не се изпълнява. Вижте GNU gettext разпространението за повече информация за .po файлове.

-W не-десетични данни

- данни без десетични данни Разпознаване на октавни и шестнадесетични стойности във входните данни. Използвайте тази опция с голяма предпазливост!

-W posix

--posix Включва режим на съвместимост със следните допълнителни ограничения:

*

Не се разпознават последователности на бягство.

*

Само пространството и раздела действат като полеви сепаратори, когато FS е настроено на едно пространство, новия ред не.

*

Не можете да продължите линиите след това ? и :.

*

Функцията за синоним за функцията за ключови думи не се разпознава.

*

Операторите ** и ** = не могат да се използват вместо ^ и ^ = .

*

Функцията fflush () не е налице.

-W профил [ = prof_file ]

--profile [ = prof_file ] Изпратете профилираните данни на prof_file . По подразбиране е awkprof.out . Когато се пускат с gawk , профилът е само "доста печатна" версия на програмата. Когато се изпълнява pgawk , профилът съдържа броя на изпълненията на всеки израз в програмата в лявото поле и броя на функционалните повиквания за всяка потребителски дефинирана функция.

-W повторен интервал

-re-interval Позволява използването на интервални изрази при съвпадение на регулярен израз (вж. Регулаторни изрази , по-долу). Интервалните изрази не са традиционно налични на езика AWK. Стандартът POSIX ги добавя, за да направят awk и egrep съвместими един с друг. Въпреки това, използването им вероятно ще наруши старите програми на AWK, така че Gawk ги предоставя само ако са поискани с тази опция или когато е посочено --posix .

-W текстова програма източник

- source program-text Използвайте програмния текст като изходен код на програмата AWK. Тази опция позволява лесно обединяване на функциите на библиотеката (използва се чрез опциите -f и -file ) с изходния код, въведен на командния ред. Той е предназначен основно за средни до големи програми AWK, използвани в скриптове на черупки.

-W версия

--version Отпечатайте информацията за версията за този конкретен екземпляр на стандартния изход. Това е полезно главно за да се разбере дали текущото копие на проблясъка на вашата система е актуализирано по отношение на това, което Фондацията за свободен софтуер разпространява. Това е полезно и при докладване на грешки. (По стандартите за кодиране на GNU , тези опции причиняват незабавен и успешен изход.)

- Сигнализирайте края на опциите. Това е полезно, за да позволим допълнителни аргументи за самата програма AWK да започне с "-". Това е главно за съгласуваност с конвенцията за архитектурен анализ, използвана от повечето POSIX програми.

В режим на съвместимост всички други опции се означават като невалидни, но иначе са игнорирани. При нормална работа, докато програмният текст е бил предоставен, неизвестни опции се предават на програмата AWK в ARGV масива за обработка. Това е особено полезно за стартиране на програми AWK чрез изпълнителния механизъм "#!".

ИЗПЪЛНЕНИЕ НА ПРОГРАМАТА AWK

Програмата AWK се състои от поредица от изрази за действие и опционални дефиниции на функции.

образец { изявления за действие }

име на функцията ( списък с параметри ) { statements }

Gawk първо прочита програмния източник от програмния файл (и), ако е зададен, от аргументи към - източник или от първия аргумент без опция на командния ред. Опциите -f и -източникът могат да се използват няколко пъти в командния ред. Gawk чете програмния текст, сякаш всичките текстови източници на програмните файлове и команден ред бяха обединени заедно. Това е полезно за изграждане на библиотеки с функции на AWK, без да е необходимо да ги включваме във всяка нова програма AWK, която ги използва. Тя също така дава възможност за смесване на функциите на библиотеката с програми от командния ред.

Променливата на средата AWKPATH указва пътя за търсене, който да се използва при намиране на изходни файлове, наречени с опцията -f . Ако тази променлива не съществува, пътят по подразбиране е ".: / Usr / local / share / awk" . (Действителната директория може да се различава в зависимост от това как е създаден и инсталиран.) Ако името на файла, дадено на опцията -f съдържа знак "/", не се извършва търсене на път.

Gawk изпълнява програми AWK в следния ред. Първо, всички променливи задания, определени чрез опцията -v се изпълняват. След това, Gawk компилира програмата във вътрешна форма. След това gawk изпълнява кода в блока (ите) BEGIN (ако има такива) и след това продължава да чете всеки файл, наречен в ARGV масива. Ако на командния ред няма именирани файлове, gawk прочита стандартния вход.

Ако името на файла в командния ред има формулата var = val, то се третира като задаване на променлива. За променливата var ще бъде присвоена стойностната стойност. (Това се случва, след като са изпълнени всички BEGIN блокове.) Задачата за задаване на променлива на командния ред е най-полезна за динамично задаване на стойности на променливите, които AWK използва, за да контролира как входът е разделен на полета и записи. Също така е полезно за контролиране на състоянието, ако са необходими няколко пропуска за един файл с данни.

Ако стойността на даден елемент на ARGV е празна ( "" ), Gawk пропуска над него.

За всеки запис във входа, проблясъците проверяват дали съответстват на всеки модел в програмата AWK. За всеки шаблон, който съответства на записа, се изпълнява съответното действие . Моделите се тестват в реда, в който се намират в програмата.

Накрая, след като всички входове са изчерпани, gawk изпълнява кода в блока (ите) END (ако има такива).

Променливи, записи и полета

Променливите AWK са динамични; те се появяват, когато се използват за първи път. Стойностите им са или числа с плаваща запетая, или низове, или и двете, в зависимост от това как се използват. AWK също има едномерни масиви; масиви с множество размери могат да бъдат симулирани. Няколко предварително дефинирани променливи се задават като програмни изпълнения; те ще бъдат описани като необходими и обобщени по-долу.

Records

Обикновено записите се разделят с нови линии. Можете да контролирате разделянето на записите чрез задаване на стойности на вградената променлива RS . Ако RS е всеки един знак, този знак разделя записите. В противен случай RS е регулярен израз. Текстът във входа, съответстващ на този регулярен израз, отделя записа. В режим на съвместимост обаче само първият знак на низовата му стойност се използва за разделяне на записите. Ако RS е на нула низ, тогава записите са разделени от празни редове. Когато RS е настроен на нула низ, символът на новия ред винаги действа като сепаратор на поле, в допълнение към това, което FS може да има.

Полетата

При всяко прочитане на входен запис, Gawk разделя записа в полета , като използва стойността на променливата FS като сепаратор на полета. Ако FS е единичен знак, полетата се разделят с този знак. Ако FS е нула низ, тогава всеки отделен символ става отделно поле. В противен случай се очаква FS да бъде пълен регулярен израз. В специалния случай, че FS е едно пространство, полетата се разделят от прозорци и / или раздели и / или нови линии. (Но вижте дискусията за -posix , по-долу). ЗАБЕЛЕЖКА: Стойността на IGNORECASE (виж по-долу) също влияе на това как се разделят полетата, когато FS е регулярен израз, и как са разделени записите, когато RS е регулярен израз.

Ако променливата FIELDWIDTHS е настроена на списък с номера, разделен на интервали, всяко поле се очаква да има фиксирана ширина, а прозорецът се разделя на определените ширини. Стойността на FS се игнорира. Присвояването на нова стойност за FS препятства използването на FIELDWIDTHS и възстановява поведението по подразбиране.

Всяко поле във входния запис може да се посочва от неговата позиция, $ 1 , $ 2 и т.н. $ 0 е целият запис. Полетата не трябва да се посочват от константи:

п = 5
отпечатайте $ n

отпечатва петото поле във входящия запис.

Променливата NF е зададена на общия брой полета във входния запис.

Препратките към несъществуващи полета (т.е. полета след $ NF ) произвеждат нулевия низ. Въпреки това, присвояването на несъществуващо поле (напр. $ (NF + 2) = 5 ) увеличава стойността на NF , създава полета с нулев низ като стойност и предизвиква възстановяването на стойността на $ 0 полетата са разделени със стойността на OFS . Препратките към отрицателни номерирани полета причиняват фатална грешка. Намаляването на NF води до загуба на стойностите на полетата, минаващи през новата стойност, и стойността на $ 0 да бъде преизчислена, като полетата са разделени със стойността на OFS .

Присвояването на стойност на съществуващо поле води до възстановяване на целия запис, когато се посочва $ 0 . Аналогично, задаването на стойност на $ 0 причинява записването на записа, като създава нови стойности за полетата.

Вградени променливи

Вградените променливи на Gawk са:

ARGC

Броят аргументи на командния ред (не включва опции за търсене или източник на програмата).

ARGIND

Индексът в ARGV на текущия файл, който се обработва.

ARGV

Масив от аргументи на командния ред. Масивът се индексира от 0 до ARGC - 1. Динамично променящото се съдържание на ARGV може да контролира файловете, използвани за данни.

BINMODE

При не-POSIX системите се посочва използването на `` двоичен '' режим за всички I / O файлове. Числните стойности от 1, 2 или 3 уточняват, че входните файлове, изходните файлове или всички файлове съответно трябва да използват двоични I / O. Стойностите на низовете за "r" или "w" уточняват, че входните файлове или изходните файлове съответно трябва да използват двоични I / O. Стойностите на низовете за "rw" или "wr" указват, че всички файлове трябва да използват двоични I / O. Всяка друга стойност на низ се третира като "rw" , но генерира предупредително съобщение.

CONVFMT

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

ENVIRON

Масив, съдържащ стойностите на текущата среда. Масивът се индексира от променливите на средата, като всеки елемент е стойността на тази променлива (напр. ENVIRON ["HOME"] може да бъде / home / arnold ). Промяната на този масив не засяга средата, наблюдавана от програмите, които се появяват чрез пренасочване или функцията system () .

ERRNO

Ако възникне системна грешка или направи пренасочване за getline , по време на четене за getline или по време на затваряне () , тогава ERRNO ще съдържа низ, описващ грешката. Стойността подлежи на превод в не-английски локали.

FIELDWIDTHS

Списък с полета, разделен в бяло пространство. Когато е настроен, Gawk анализира входа в полета с фиксирана ширина, вместо да използва стойността на променливата FS като сепаратор на полета.

ИМЕ НА ФАЙЛ

Името на текущия входен файл. Ако на командния ред не са зададени файлове, стойността на FILENAME е `` - ''. Файлът FILENAME обаче не е дефиниран в блока BEGIN (освен ако не е зададен от getline ).

FNR

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

FS

Сепараторът на входното поле, по подразбиране място. Вижте полетата по-горе.

IGNORECASE

Контролира чувствителността на всички операции с регулярен израз и низ. Ако IGNORECASE има ненулева стойност, тогава сравненията на низовете и съответствието на шаблоните в правилата, разделянето на полетата с FS , записът се разделя с RS , съвпадането на регулярния израз с ~ и ! ~ И gensub () , gsub () , index , съвпадение () , разделяне () и sub () вградени функции, всички игнорират случаи, когато правят операции с регулярно изразяване. ЗАБЕЛЕЖКА: Индексирането на масива не е засегнато, нито функцията asort () .

Така, ако IGNORECASE не е равен на нула, / aB / съвпада с всички струни "ab" , "aB" , "Ab" и "AB" . Както и при всички променливи AWK, началната стойност на IGNORECASE е нула, така че всички операции с регулярно изразяване и низове обикновено са чувствителни към малки и големи букви. Под Unix се използва пълният символен набор ISO 8859-1 Latin-1, когато игнорираме случая.

LINT

Осигурява динамично управление на опцията - lint в рамките на програма AWK. Когато е вярно, Gawk отпечатва предупреждения за мъх. Когато е фалшив, не го прави. Когато се зададе низовата стойност "фатална" , предупрежденията за влакна стават фатални грешки, точно като - lint = fatal . Всяка друга истинска стойност просто отпечатва предупреждения.

NF

Броят на полетата в текущия запис.

NR

Общият брой въведени досега записи.

OFMT

Изходният формат за числа, "% .6g" , по подразбиране.

OFS

Сепараторът на изходното поле, интервал по подразбиране.

ORS

Разделителят за запис на изход, по подразбиране нов ред.

PROCINFO

Елементите на този масив осигуряват достъп до информация за текущата AWK програма. На някои системи може да има елементи в масива "група1" до "група n " за някои n , което е броят на допълнителните групи, които процесът има. Използвайте оператора, за да тествате тези елементи. Предлагат се следните елементи:

PROCINFO [ "EGID"]

стойността на системното повикване getegid (2).

PROCINFO [ "EUID"]

стойността на системното повикване geteuid (2).

PROCINFO [ "FS"]

"FS", ако разделянето на полето с FS е в сила, или "FIELDWIDTHS", ако разделянето на полето с FIELDWIDTHS е в сила.

PROCINFO [ "GID"]

стойността на системното обаждане getgid (2).

PROCINFO [ "pgrpid"]

Идентификационната група на процеса на текущия процес.

PROCINFO [ "PID"]

процес ID на текущия процес.

PROCINFO [ "PPID"]

идентификационния номер на родителския процес на текущия процес.

PROCINFO [ "UID"]

стойността на системното обаждане getuid (2).

RS

Сепараторът на входните записи е по подразбиране нов ред.

RT

Записващият терминатор. Gawk задава RT на входния текст, съответстващ на символа или регулярния израз, зададен от RS .

RSTART

Индексът на първия знак съвпада с мача () ; 0, ако няма съвпадение. (Това означава, че индексите на символите започват от една.)

RLENGTH

Дължината на низа, съвпадаща с мача () ; -1, ако няма съвпадение.

SUBSEP

Характеристика, използван за разделяне на множество индекси в елементите на масива, по подразбиране "\ 034" .

TEXTDOMAIN

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

Масивите

Масивите се абонират с израз между квадратни скоби ( [ и ] ). Ако изразът е изразителен списък ( expr , expr ...), индексният масив е низ, състоящ се от свързването на стойността (низ) на всеки израз, разделена от стойността на променливата SUBSEP . Това съоръжение се използва за симулиране на многомерни масиви. Например:

i = "А"; j = "В"; k = "C"
x [i, j, k] = "Здравей, свят \ n"

присвоява низа "hello, world \ n" на елемента на масива x, който се индексира от низа "A \ 034B \ 034C" . Всички масиви в AWK са асоциативни, т.е. индексирани по низови стойности.

Специалният оператор в може да бъде използван в изявление if или while , за да види дали даден масив има индекс, състоящ се от определена стойност.

ако (масив в масив) матрица за отпечатване [val]

Ако масивът има няколко индекси, използвайте (i, j) в масив .

Вградената конструкция може също да бъде използвана в за верига за итерация за всички елементи на масив.

Елементът може да бъде изтрит от масив с израза за изтриване . Изявлението за изтриване може да се използва и за изтриване на цялото съдържание на масив, само като се посочи името на масива без индекс.

Променливо въвеждане и преобразуване

Променливите и полетата могат да бъдат номера (с плаваща точка) или низове, или и двете. Как се тълкува стойността на дадена променлива зависи от нейния контекст. Ако се използва в цифров израз, той ще бъде третиран като число, ако се използва като низ, той ще бъде третиран като низ.

За да накарате променливата да се третира като число, добавете 0 към нея; да го принудим да се третира като низ, да я обедини с нула низ.

Когато низът трябва да бъде преобразуван в номер, преобразуването се осъществява чрез strtod (3). Номерът се преобразува в низ, като се използва стойността на CONVFMT като форматен низ за sprintf (3), като цифровата стойност на променливата е аргумент. Въпреки това, въпреки че всички числа в AWK са плаваща точка, интегралните стойности винаги се конвертират като числа. По този начин

CONVFMT = "% 2.2f" a = 12 b = a ""

променливата b има низова стойност "12", а не "12.00" .

Gawk прави сравнения, както следва: Ако две променливи са цифрови, те се сравняват цифрово. Ако една стойност е цифрова, а другата има низова стойност, която е "цифров низ", тогава се правят и сравнения. В противен случай цифровата стойност се преобразува в низ и се извършва сравняване на низове. Две струни се сравняват, разбира се, като струни. Имайте предвид, че стандартът POSIX прилага концепцията на "цифров низ" навсякъде, дори и на низовите константи. Това обаче е очевидно неправилно и не го прави. (За щастие това се определя в следващата версия на стандарта.)

Обърнете внимание, че низовите константи, като например "57" , не са числови низове, те са низови константи. Идеята за `` цифров низ '' се отнася само за полета, въвеждане на getline , FILENAME , ARGV елементи, ENVIRON елементи и елементите на масив, създаден от split (), които са числови низове. Основната идея е, че потребителският вход и само входът на потребителя, който изглежда цифров, трябва да бъдат третирани по този начин.

Неинициализираните променливи имат цифровата стойност 0 и низовата стойност "" (нулевата или празната низа).

Октавни и шестнадесетични константи

Започвайки с версия 3.1 на gawk, можете да използвате октанови и шестнадесетични константи в стила C във вашия изходен код на програмата AWK. Например, осмичната стойност 011 е равна на десетична стойност 9 , а шестнадесетичната стойност 0x11 е равна на десетична стойност 17.

Струнни константи

Константите на стринговете в AWK са последователности от символи, заградени между двойните кавички ( " ). В рамките на струните се разпознават определени последователности на бягство , както в С. Това са:

\\

Буквално обратно наклонена черта.

\ а

Бутонът "предупреждение"; обикновено знака ASCII BEL.

\ б

връщане.

\ е

формата хранят.

\ Н

нова линия.

\ R

връщане на карето.

\T

хоризонтален раздел.

\ о

вертикален раздел.

\ x хекса цифри

Знакът, представен от низа с шестнадесетични цифри след \ x . Както в ANSIC, всички следващи шестнадесетични цифри се считат за част от последователността на евакуация. (Тази функция трябва да ни разкаже нещо за езиковия дизайн от комисията). Например "\ x1B" е ASCIIESC (escape) символ.

\ ddd

Знакът, представен чрез 1-, 2- или 3-цифрена последователност от октавни цифри. Например "\ 033" е ASCII ESC (escape) символ.

\ c

Буквален характер c .

Ефектните последователности могат също така да се използват в постоянни регулярни изрази (напр. / [\ T \ f \ n \ r \ v] / съвпада с буквите в интервала).

В режим на съвместимост, символите, представени чрез октави и шестнадесетични последователности на бягство, се третират буквално, когато се използват в константи с регулярно изразяване. Така, / a \ 52b / е еквивалентно на / a \ * b / .

Модели и действия

AWK е език, ориентиран към линията. Моделът е на първо място, а след това и действието. Декларациите за действие са приложени в { и } . Възможно е моделът да липсва или действието да липсва, но, разбира се, не и двете. Ако моделът липсва, действието се изпълнява за всеки отделен запис на входа. Липсващото действие е еквивалентно на

{print}

който отпечатва целия запис.

Коментарите започват с символа "#" и продължават до края на реда. Празен ред може да се използва за отделяне на изявления. Обикновено изявлението завършва с нов ред, но това не важи за линии, завършващи с ",,", { , ? , : , && , или || , Линии, които завършват или правят своите изявления автоматично продължават на следващия ред. В други случаи линия може да бъде продължена, като се прекрати с ", в който случай новата линия ще бъде пренебрегната.

Няколко изявления могат да се поставят на един ред, като се разделят с "`; ''. Това важи както за изявленията в рамките на частта от действие на двойка модели-действия (обичайният случай), така и за самите изявления за шаблони.

Модели

Моделите на AWK може да са едно от следните:

BEGIN END / регулярен израз / модел на релационно изразяване && шаблон на шаблона || образец модел ? модел : модел ( модел ) ! образец модел1 , модел2

BEGIN и END са два специални вида модели, които не се тестват срещу входа. Частите на действие на всички модели BEGIN се обединяват, сякаш всички изявления са били написани в един блок BEGIN . Те се изпълняват преди да се чете някой от входовете. По същия начин всички END блокове се обединяват и се изпълняват, когато целият вход е изчерпан (или когато се изпълни изходното изречение). Моделите BEGIN и END не могат да бъдат комбинирани с други модели в изразите на шаблони. Моделите BEGIN и END не могат да липсват в части за действие.

За / регулярен израз / шаблони, свързаното изречение се изпълнява за всеки входен запис, който съвпада с регулярния израз. Редовните изрази са същите като тези в egrep (1) и са обобщени по-долу.

Релационният израз може да използва който и да е от операторите, дефинирани по-долу в раздела за действия. Те обикновено проверяват дали определени полета съвпадат с определени регулярни изрази.

В && , || , и ! операторите са логически AND, логически OR, и логически NOT, съответно, както в C. Те извършват късо съединение оценка, също както и в C, и се използват за комбиниране на по-примитивни изрази модел. Както и в повечето езици, може да се използват скоби, за да се промени реда на оценяване.

Операторът?: Е като същия оператор в C. Ако първият модел е вярен тогава моделът, използван за тестване, е вторият модел, в противен случай той е третият. Само един от втория и третия модел се оценява.

Формата pattern1 , pattern2 на израз се нарича диапазон на обхвата . Той съвпада с всички входящи записи, започващи с запис, който съвпада със pattern1 , и продължава до запис, съвпадащ с pattern2 , включително. Тя не се комбинира с някакъв друг вид израз на шаблона.

Редовни изрази

Редовните изрази са разширеният вид, намерен в егреп . Те се състоят от знаци, както следва:

° С

съвпада с неметарактер c .

\° С

съответства на буквалния характер c .

,

съответства на всеки знак, включително нов ред.

^

съвпада с началото на низ.

$

съвпада с края на низ.

[ abc ... ]

списък с символи, съвпада с който и да е от символите abc ....

[^ abc ... ]

отхвърлен списък с символи, съвпада с всеки знак освен abc ....

r1 | r2

редуване: съвпада с r1 или r2 .

R1R2

конкатенация: съвпада с r1 , а след това r2 .

r +

съвпада с един или повече r .

r *

съответства на нула или повече r .

r ?

съответства на нула или на един r .

( r )

групиране: съвпада с r .

r { n }

r { n ,}

r { n , m } Едно или две числа в скоби означават интервал на изразяване . Ако има едно число в скобите, предходният регулярен израз r се повтаря n пъти. Ако има две числа, разделени със запетая, r се повтаря от n до m пъти. Ако има едно число, последвано от запетая, тогава r се повтаря поне n пъти.

Интервалните изрази са налице само ако на командния ред е зададен или --posix или --re-interval .

\ у

съвпада с празния низ в началото или края на думата.

\ B

съвпада с празния низ в рамките на една дума.

\ <

съвпада с празния низ в началото на думата.

\>

съвпада с празния низ в края на думата.

\ w

съвпада с всеки знак-съставна дума (буква, цифра или долен).

\ W

съвпада с всеки знак, който не е словосъставляващ.

\ `

съвпада с празния низ в началото на буфер (низ).

\ '

съвпада с празния низ в края на буфера.

Последователностите на евакуация, които са валидни в низовите константи (виж по-долу), също са валидни в регулярните изрази.

Класовете знаци са нова функция, въведена в стандарта POSIX. Класът на знаците е специално означение за описване на списъци с символи, които имат специфичен атрибут, но самите реални символи могат да се различават в отделните страни и / или от набора от символи до набора от символи. Например, понятието за азбучен характер се различава в САЩ и във Франция.

Класът на знаците е валиден само в регулярен израз в скобите на списъка с знаци. Класовете знаци се състоят от [: , ключова дума, която обозначава класа и :] . Класовете знаци, определени от стандарта POSIX, са:

[: alnum:]

Буквено-цифрови знаци.

[: алфа:]

Азбучни знаци.

[: празно:]

Космически или табулаторни знаци.

[: Cntrl:]

Контролни знаци.

[: цифра:]

Числени знаци.

[: графика:]

Герои, които могат да бъдат отпечатани и видими. (Мястото може да се отпечата, но не се вижда, докато a е и двете.)

[:нисък:]

С малки азбучни букви.

[: печат:]

Отпечатващи символи (знаци, които не са контролни знаци.)

[: punct:]

Пентактуални знаци (символи, които не са букви, цифри, контролни знаци или космически знаци).

[: пространство:]

Космически знаци (като пространство, табулатор и формуляр, за да назовем само няколко).

[:горен:]

Буквени буквени букви.

[: xdigit:]

Знаци, които са шестнадесетични цифри.

Например, преди стандарт POSIX, за да съответствате на буквено-цифрови символи, би трябвало да напишете / [A-Za-z0-9] / . Ако вашият набор от символи имаше други азбучни символи в него, това нямаше да съответства на тях, а ако вашият набор от символи е сравнително различен от ASCII, това дори не може да съвпада с буквено-цифровите символи ASCII. С класовете POSIX знаци можете да напишете / [[: alnum:]] / и това съвпада с азбучните и цифровите знаци във вашия набор от символи.

В списъците със знаци могат да се появят две допълнителни серии. Те се отнасят за не-ASCII символни набори, които могат да имат единични символи (наречени сравнителни елементи ), които са представени с повече от един символ, както и няколко знака, които са еквивалентни за целите на сортиране или сортиране. (Например, на френски, равнина "e" и гроб с акцент e "са еквивалентни.)

Събиране на символи

Колективният символ е многостенно съставен елемент, ограден в [. и .] . Например, ако ch е елемент за сортиране, тогава [[.ch.]] Е регулярен израз, който съвпада с този елемент за сортиране, докато [ch] е регулярен израз, съответстващ на c или h .

Класове на еквивалентността

Клас на еквивалентност е специфично за локално име за списък с еквивалентни символи. Името е оградено в [= и =] . Например, името e може да бъде използвано за представяне на всички "e", "e", "и" e ". В този случай [[= e =]] е регулярен израз съответства на всяко от e , e ' или e' .

Тези функции са много ценни в не-англоезичните локали. Функциите на библиотеката, които gawk използва за съвпадение на регулярния израз, понастоящем разпознават класове POSIX знаци; те не разпознават съпоставими символи или класове на еквивалентност.

Операторите \ y , \ B , \ < , \> , \ w , \ W , \ ' и \' са специфични за проблясъците ; те са разширения, базирани на инсталации в библиотеките за регулярна експресия на GNU.

Различните опции на командния ред контролират как Gawk интерпретира символите в регулярни изрази.

Няма опции

В случая по подразбиране, Gawk предоставя всички възможности на POSIX регулярните изрази и операторите за регулярен израз на GNU, описани по-горе. Интервалните изрази обаче не се поддържат.

--posix

Поддържат се само POSIX регулярни изрази, операторите на GNU не са специални. (Например, \ w съвпада с буква буква w ). Интервалните изрази са разрешени.

--traditional

Традиционните Unix awk регулярни изрази са съвпадащи. Операторите на GNU не са специални, интервалните изрази не са налични, нито класовете POSIX ( [[: alnum:]] и т.н.). Символите, описани от октави и шестнадесетични последователности на бягство, се третират буквално, дори и да представляват метамаракари с регулярен израз.

--re-интервал

Позволявайте интервални изрази в регулярни изрази, дори ако е предоставена - традиционна .

мерки

Декларациите за действие са приложени в скоби {{ }} . Изявленията за действие се състоят от обичайните присвоявания, условни и циклични изявления, намерени на повечето езици. Операторите, контролните изрази и наличните отчети за вход / изход са моделирани след тези в С.

Операторите

Операторите в AWK, в низходящ ред, са

( ... )

групировка

$

Полета за справка.

++ -

Увеличаване и намаляване, и префикс, и постфикс.

^

Exponentiation ( ** може да се използва и ** = за оператора на заданието).

+ -!

Unary plus, unary minus и логическо отрицание.

* /%

Умножение, разделяне и модул.

+ -

Добавяне и изваждане.

пространство

Конциране на струните.

<>

<=> =

= == Редовните релационни оператори.

~

Редовно съвпадение на израз, негативно съвпадение. ЗАБЕЛЕЖКА: Не използвайте постоянен регулярен израз ( / foo / ) отляво на ~ или ! ~ . Използвайте само една от дясната страна. Изразът / foo / ~ exp има същото значение като (($ 0 ~ / foo /) ~ exp ) . Това обикновено не е това, което е било предназначено.

в

Членство в масив.

&&

Логически И.

||

Логически OR.

?:

В условен израз. Това има формата expr1 ? expr2 : expr3 . Ако expr1 е вярно, стойността на израза е expr2 , в противен случай е expr3 . Само една от expr2 и expr3 се оценява.

= + = - =

* = / =% = ^ = Задание. И двете абсолютни задачи ( var = стойност ) и задаване на оператор (другите форми) се поддържат.

Контролни изявления

Контролните декларации са, както следва:

ако ( условие ) изявление [ else statement ], докато ( условие ) изявление направя изявление докато ( условие ) за ( expr1 ; expr2 ; expr3 ) изявление за ( var в масив ) изявления }

I / O изявления

Вложенията / изходите са както следва:

затвори ( файл [ , как ] )

Затваряне на файл, тръба или съвместно обработване. По избор, как трябва да се използва само при затваряне на единия край на двупосочна тръба към съвместно обработване. Тя трябва да е низова стойност, или "до", или "от" .

getline

Задайте $ 0 от следващия запис; задайте NF , NR , FNR .

getline < файл

Задайте $ 0 от следващия запис на файла ; задайте NF .

getline var

Задайте var от следващия запис; набор NR , FNR .

getline var < файл

Задайте var от следващия запис на файла .

команда | getline [ var ]

Стартирайте командния тръбопровод на изхода или в $ 0 или var , както по-горе.

команда | & getline [ var ]

Стартирайте командата като копроцесорна тръбопроводна продукция в $ 0 или var , както по-горе. Съвместните процеси представляват разширение.

следващия

Спиране на обработката на текущия запис. Следващият входен запис се чете и обработката започва от първия модел в програмата AWK. Ако се достигне краят на входните данни, блоковете END , ако има такива, се изпълняват.

nextfile

Спиране на обработката на текущия входен файл. Следващото четене на входния запис идва от следващия входен файл. FILENAME и ARGIND се актуализират, FNR се нулира на 1 и обработката започва от първия модел в програмата AWK. Ако се достигне краят на входните данни, блоковете END , ако има такива, се изпълняват.

печат

Отпечатва текущия запис. Изходният запис се прекратява със стойността на променливата ORS .

print expr-list

Отпечатва изрази. Всеки израз е разделен със стойността на OFS променливата. Изходният запис се прекратява със стойността на променливата ORS .

print expr-list > файл

Отпечатва изрази във файл . Всеки израз е разделен със стойността на OFS променливата. Изходният запис се прекратява със стойността на променливата ORS .

printf fmt, expr-списък

Форматиране и отпечатване.

printf fmt, expr-list > файл

Форматирайте и отпечатайте върху файл .

система ( cmd-линия )

Изпълнете командата cmd-line и върнете изходното състояние. (Възможно е това да не е налице за системи, които не са POSIX.)

fflush ( [ файл ] )

Промивайте всички буфери, свързани с отворения изходен файл или файл с тръби. Ако файлът липсва, стандартният изход се зачервява. Ако файлът е нулевият низ, тогава всички отворени изходни файлове и тръби имат буферите им зачервени.

Допълнителни пренасочвания на изхода са позволени за печат и printf .

отпечатване ... >> файл

прибавя продукцията към файла .

печат ... | команда

пише на тръба.

print ... & команда

изпраща данни към ко-процес.

Командата getline връща 0 на края на файла и -1 за грешка. При грешка ERRNO съдържа низ, описващ проблема.

ЗАБЕЛЕЖКА: Ако използвате тръба или съвместно обработване на линия , или от печат или printf в рамките на цикъл, трябва да използвате close (), за да създадете нови копия на командата. AWK не спира автоматично тръби или ко-процеси при връщането на EOF.

Разпечатката на printf

Версиите AWK на оператора printf и sprintf () (вижте по-долу) приемат следните формати за спецификация на реализация:

%° С

Знак ASCII. Ако аргументът, използван за % c, е числен, той се третира като знак и се отпечатва. В противен случай аргументът се приема за низ и единственият първи знак на този низ се отпечатва.

% d , % i

Десетично число (цяло число).

% e,% E

Номер с плаваща запетая на формуляра [-] d.dddddde [+ -] dd . Форматът % E използва E вместо e .

% е

Номер с плаваща запетая на формуляра [-] ddd.dddddd .

% g,% G

Използвайте % e или % f конверсия, което от двете е по-кратко, с незначителни нули, потиснати. Форматът % G използва % E вместо % e .

% о

Неозначен осмичен номер (също цяло число).

% u Незначителен десетичен номер (отново цяло число).

Верен символ.

% x,% X

Неподписано шестнадесетично число (цяло число). Форматът % X използва ABCDEF вместо abcdef .

%%

Един знак % ; никой аргумент не се преобразува.

По избор, допълнителни параметри могат да лежат между % и контролната буква:

брои $

Използвайте този аргумент в този момент във форматирането. Това се нарича позиционен спецификатор и е предназначено предимно за използване в преведени версии на струнни струни, а не в оригиналния текст на програма AWK. Това е простичко разширение.

-

Изразът трябва да бъде оправдан в полето му.

пространство

За числови преобразувания, представят положителни стойности с интервал и отрицателни стойности със знак минус.

+

Знакът "плюс", използван преди модификатора на ширината (виж по-долу), казва, че винаги трябва да има знак за цифрови преобразувания, дори данните, които трябва да бъдат форматирани, да са положителни. Думата + заменя модификатора на пространството.

#

Използвайте алтернативен формуляр за някои контролни букви. За % o осигурете водеща нула. За % x и % X осигурете водещ 0x или 0X за ненулев резултат. За % e , % E и % f , резултатът винаги съдържа десетична точка. За % g и % G , крайните нули не се премахват от резултата.

0

Водещият 0 (нула) действа като знаме, което показва, че изходът трябва да бъде подравнен с нули вместо с интервали. Това важи и за неметални продуктови формати. Този флаг има ефект само когато ширината на полето е по-широка от стойността, която ще се отпечата.

широчина

Полето трябва да бъде подплатено до тази ширина. Полето обикновено е подплатено с интервали. Ако е използван флагът 0 , то е подплатено с нули.

, Prec

Номер, който определя точността, която да се използва при печат. За форматите % e , % E и % f това определя броя на цифрите, които искате да бъдат отпечатани вдясно от десетичната запетая. За форматите % g и % G определя максималния брой значими цифри. За формите % d , % o , % i , % u , % x и % X , той определя минималния брой цифри, които да се отпечатат. За % s тя определя максималния брой знаци от низа, който трябва да бъде отпечатан.

Предоставят се поддръжка на динамичната ширина и прецизност на програмите ANSI C printf () . A * на мястото на ширината или спецификациите на предсказуемостта, кара техните стойности да бъдат взети от списъка с аргументи към printf или sprintf () . За да използвате позиционен спецификатор с динамична ширина или точност, подайте броя $ след * във форматния низ. Например "% 3 $ * 2 $. * 1 $ s" .

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

Когато правите I / O пренасочване от print или printf във файл или чрез getline от файл, gawk разпознава някои специални имена на файлове вътрешно. Тези имена на файлове позволяват достъп до отворени описания на файлове, наследени от родителския процес на Gawk (обикновено shell). Тези имена на файлове също могат да се използват в командния ред, за да назоват файлове с данни. Имената на файловете са:

/ сътрудничество / стандартния вход

Стандартният вход.

/ сътрудничество / стандартния изход

Стандартният изход.

/ сътрудничество / STDERR

Стандартният изход за грешка.

/ dev / fd / n

Файлът, свързан с отворения файлов дескриптор n .

Те са особено полезни за съобщенията за грешки. Например:

отпечатай "Ти го взриви!" > "/ dev / stderr"

докато в противен случай би трябвало да използвате

отпечатай "Ти го взриви!" | "cat 1> & 2"

Следните специални имена на файлове могат да се използват с оператора | & co-process за създаване на TCP / IP мрежови връзки.

/ inet / tcp / lport / rhost / rport

Файл за TCP / IP връзка на локален порт lport до отдалечен хост rhost на отдалечен порт rport . Използвайте порт от 0, за да накарате системата да избере порт.

/ inet / udp / lport / rhost / rport

Подобно, но използвайте UDP / IP вместо TCP / IP.

/ inet / raw / lport / rhost / rport

Запазено за бъдещо ползване.

Другите специални имена на файлове осигуряват достъп до информация за протичащия процес. Тези имена на файлове вече са остарели. Използвайте масива PROCINFO, за да получите информацията, която предоставят. Имената на файловете са:

/ сътрудничество / PID

Четенето на този файл връща идентификационния процес на текущия процес, десетично, прекратен с нов ред.

/ сътрудничество / PPID

Четенето на този файл връща идентификационния номер на родителския процес на текущия процес, десетично, прекратен с нов ред.

/ сътрудничество / pgrpid

Четенето на този файл връща ID на процесната група на текущия процес, десетично, прекратено с нов ред.

/ сътрудничество / потребител

Четенето на този файл връща един запис, прекратен с нов ред. Полетата са разделени с интервали. $ 1 е стойността на системното обаждане getuid (2), $ 2 е стойността на системното повикване geteuid (2), $ 3 е стойността на системното повикване getgid (2) и $ 4 е стойността на getegid (2) системно повикване. Ако има допълнителни полета, те са идентификационните номера на групата, които се връщат от getgroups (2). Възможно е няколко групи да не се поддържат на всички системи.

Числени функции

AWK има следните вградени аритметични функции:

atan2 ( у , х )

Връща арктангента на y / x в радиани.

cos ( expr )

Връща косинуса на expr , който е в радиани.

exp ( expr )

Експоненциалната функция.

int ( expr )

Прекъсва до цяло число.

регистрационен ( expr )

Функцията на естествения логаритъм.

ранд ()

Връща случайно число между 0 и 1.

грях ( израз )

Връща синуса на expr , който е в радиани.

sqrt ( expr )

Функцията квадратен корен.

srand ( [ expr ] )

Използва expr като ново семе за генератора на случайни числа. Ако не е предоставена изрична декларация , се използва времето на деня. Стойността на връщане е предишното семе за генератора на произволни числа.

Струнни функции

Gawk има следните вградени низови функции:

асорт ( s [ , d ] )

Връща броя елементи в масива източник s . Съдържанието на s се сортира, като се използват нормалните правила на gawk за сравняване на стойностите, а индексите на сортираните стойности на s се заменят с последователни числа, започващи с 1. Ако е зададен опционалният масив за дестинация d , тогава s първо се дублира в d , а след това d се сортира, оставяйки индексите на масива на източника непроменено.

gensub ( r , s , h [ , t ] )

Търсете целевия низ t за съвпадения на регулярния израз r . Ако h е низ, започващ с g или G , заменете всички съвпадения на r с s . В противен случай, h е число, което показва кое съвпадение на r се заменя. Ако t не се доставя, вместо това се използва стойност $ 0 . В рамките на заместващия текст s , последователността \ n , където n е цифра от 1 до 9, може да се използва само за означаване на текста, който съвпада с n -та подтекст. Последователността \ 0 представлява целия съвпадащ текст, както и символа & . За разлика от sub () и gsub () , модифицираният низ се връща в резултат на функцията и първоначалният целеви низ не се променя.

gsub ( r , s , t )

За всеки подсъвкус, съответстващ на регулярния израз r в низа t , заменяйте низовете s и връщайте броя замествания. Ако t не се доставя, използвайте $ 0 . А & в заместващия текст се заменя с текста, който всъщност е съчетан. Използвайте \ &, за да получите буквално & . (Това трябва да бъде написано като "\\\" ; вижте GAWK: Ефективно програмиране на AWK за по-пълно обсъждане на правилата за & a и backslashes в заместващия текст на sub () , gsub () и gensub ( )

индекс ( s , t )

Връща индекса на низа t в низа s или 0, ако t не присъства. (Това означава, че индексите на символите започват от една.)

дължина ( [ s ] )

Връща дължината на низовете s или дължината на $ 0, ако s не се доставя.

съвпадат ( s , r [ , a ] )

Връща позицията в s, където се появява обикновеният израз r , или 0, ако r не присъства, и задава стойностите на RSTART и RLENGTH . Обърнете внимание, че поръчката на аргументите е същата като за оператора: str . Ако масивът a е осигурен, a се изчиства, а елементите 1 до n се запълват с частите на s, които съответстват на съответната подсветка в скоби в r . 0-тият елемент на a съдържа частта s съвпадаща с целия регулярен израз r .

разделен ( s , a [ , r ] )

Разделя низовете в масива a на регулярния израз r и връща броя на полетата. Ако r е пропуснато, вместо това се използва FS . Масивът a се изчиства първо. Разделянето се държи идентично с разделянето на полето, описано по-горе.

sprintf ( fmt , expr-списък )

Разпечатва експрес-списък според fmt и връща получения низ.

strtonum ( str )

Изследва str и връща цифровата си стойност. Ако str започва с водещ 0 , strtonum () предполага, че str е осмично число. Ако str започва с водещ 0x или 0X , strtonum () приема, че str е шестнадесетично число.

под ( r , s [ , t ] )

Точно като gsub () , но се заменя само първата съвпадаща подраздел.

подстрани ( s , i , n )

Връща най-много n- характерния подрайон на s започващ от i . Ако n е пропуснато, останалото s се използва.

tolower ( str )

Връща копие от стринга str , с всички главни букви в str преведени до техните съответни малки кореспонденти. Не-азбучните знаци остават непроменени.

tupper ( str )

Връща копие на стринга str , с всички малки букви в str преведени на техните съответни главни букви. Не-азбучните знаци остават непроменени.

Функции на времето

Тъй като една от основните приложения на AWK програмите е обработка на лог файлове, които съдържат информация за печат на време, gawk предоставя следните функции за получаване на времеви марки и форматирането им.

mktime ( datespec )

Rurns datespec се поставя във времева марка със същата форма, която се връща от systime () . Даунсек е низ от формуляра ГГГГГГГГГГГГГГГГГГДГЧ [ДТТ] . Съдържанието на низа е шест или седем числа, представляващи съответно цялата година, включително века, месеца от 1 до 12, деня на месеца от 1 до 31, часа на деня от 0 до 23, минутата от 0 до 59, а вторият - от 0 до 60, както и незадължително флагче за дневна светлина. Стойностите на тези номера не трябва да са в рамките на посочените диапазони; например, един час от -1 означава 1 час преди полунощ. Грегорианският календар на произход нула се приема, като годината 0 е предходната година 1 и годината -1 предходната година 0. Времето се приема, че е в местната часова зона. Ако знамето за лятното часово време е положително, времето се приема за лятно часово време; ако е нула, времето се приема за стандартно време; и ако е отрицателна (по подразбиране), mktime () се опитва да определи дали лятно часово време е в сила за определеното време. Ако datesesc не съдържа достатъчно елементи или ако резултантното време е извън обхвата, mktime () връща -1.

strftime ( [ формат [ , дата ]] )

Форматиране на таймаут съгласно спецификацията във формат. Клеймото за дата и час трябва да бъде в същата форма, както се връща от systime () . Ако липсва времева марка, се използва текущото време от деня. Ако форматът липсва, се използва формат по подразбиране, еквивалентен на изхода от датата (1). Вижте спецификацията за функцията strftime () в ANSI C за форматираните преобразувания, които са гарантирани. Публична версия на домейна strftime (3) и страница на човека за него идват с gawk ; ако тази версия е била използвана за изграждане на gawk , тогава всички реализации, описани в тази страница са достъпни за gawk.

systime ()

Връща текущото време от деня като броят секунди от Епохата (1970-01-01 00:00:00 UTC на POSIX системите).

Функции за управление на бита

Започвайки с версия 3.1 на gawk , са налице следните функции за манипулиране на битовете. Те работят чрез преобразуване на стойностите на плаваща запетая с двойна точност до неподписани дълги числа, извършване на операцията и след това превръщане на резултата обратно в плаваща точка. Функциите са:

и ( v1 , v2 )

Връщайте bitwise AND на стойностите, осигурени от v1 и v2 .

compl ( val )

Връщане на битното допълнение на вал .

lshift ( вал , брой )

Връщайте стойността на вал , преместена наляво с броя битове.

или ( v1 , v2 )

Връщайте bitwise OR от стойностите, осигурени от v1 и v2 .

rshift ( вал , брой )

Връщайте стойността на вал , преместена надясно с броя битове.

xor ( v1 , v2 )

Връщайте bitwise XOR на стойностите, осигурени от v1 и v2 .

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

Започвайки с версия 3.1 на gawk , следните функции могат да бъдат използвани от вашата AWK програма за превод на низове по време на изпълнение. За пълни подробности вижте GAWK: Ефективно програмиране на AWK .

bindtextdomain ( директория [ , домейн ] )

Указва директорията, където gawk търси .mo файлове, в случай че те не могат или не могат да бъдат поставени в "стандартните" места (напр. По време на тестване). Връща директорията, където домейнът е "свързан".

Домейнът по подразбиране е стойността на TEXTDOMAIN . Ако директорията е нула низ ( "" ), тогава bindtextdomain () връща текущото свързване за даден домейн .

dcgettext ( низ [ , домейн [ , категория ]] )

Връща транслацията на низ в домейна на текстовия домейн за категорията категория локал. Стойността по подразбиране за домейна е текущата стойност на TEXTDOMAIN . Стойността по подразбиране за категорията е "LC_MESSAGES" .

Ако доставяте стойност за категория , тя трябва да бъде низ, равен на една от известните категории локални, описани в GAWK: Ефективно програмиране на AWK . Трябва също така да предоставите текстов домейн. Използвайте TEXTDOMAIN, ако искате да използвате текущия домейн.

dcngettext ( низ1 , низ2 , номер [ , домейн [ , категория ]] )

Връща множествената форма, използвана за номера на превода на string1 и string2 в домейна на текстовия домейн за категория категория локал. Стойността по подразбиране за домейна е текущата стойност на TEXTDOMAIN . Стойността по подразбиране за категорията е "LC_MESSAGES" .

Ако доставяте стойност за категория , тя трябва да бъде низ, равен на една от известните категории локални, описани в GAWK: Ефективно програмиране на AWK . Трябва също така да предоставите текстов домейн. Използвайте TEXTDOMAIN, ако искате да използвате текущия домейн.

ФУНКЦИИ, ОПРЕДЕЛЕНИ ОТ ПОТРЕБИТЕЛЯ

Функциите в AWK се определят, както следва:

име на функцията ( списък с параметри ) { statements }

Функциите се изпълняват, когато се извикват от изрази в модели или действия. Действителните параметри, предоставени във функционалното повикване, се използват за показване на формалните параметри, обявени във функцията. Масивите се предават чрез справка, други променливи се предават по стойност.

Тъй като функциите първоначално не бяха част от езика AWK, разпоредбата за локалните променливи е доста нестабилна: Те са обявени за допълнителни параметри в списъка с параметри. Конвенцията е да се отделят локалните променливи от реалните параметри чрез допълнителни интервали в списъка с параметри. Например:

Функцията f (p, q, a, b) # a и b са локални {...} / abc / {...; f (1, 2); ...}

Лявата скоба в извикване на функция трябва незабавно да последва името на функцията, без каквото и да било интервал от бяло пространство. Това е, за да се избегне синтактична двусмисленост с оператора на конкатенацията. Това ограничение не важи за вградените функции, изброени по-горе.

Функциите могат да се извикват един друг и да бъдат рекурсивни. Функционалните параметри, използвани като локални променливи, се инициализират към нула низ и нула при призоваване на функции.

Използвайте return expr за връщане на стойност от функция. Стойността на връщането е неопределена, ако не е предоставена стойност или ако функцията се връща с "падане" на края.

Ако е предоставена - lint , gawk предупреждава за обаждания до недефинирани функции на време за анализ, вместо на време на изпълнение. Избирането на недефинирана функция по време на изпълнение е фатална грешка.

Думата func може да се използва вместо функция .

ДИНАМИЧНО НАТОВАНЕ НА НОВИ ФУНКЦИИ

Започвайки с версия 3.1 на Gawk , вие можете динамично да добавяте нови вградени функции към текущия interpreter. Пълните подробности са извън обхвата на тази страница на ръководството; вижте GAWK: Ефективно програмиране на AWK за подробности.

разширение ( обект , функция )

Динамично свързване на файла с споделен обект, наречен по обект , и функция за извикване в този обект, за да извършите инициализация. Те трябва да бъдат предоставени като струни. Връща стойността, върната от функцията .

Тази функция е предоставена и документирана в GAWK: Ефективно AWK програмиране , но всичко за тази функция вероятно ще се промени в следващото издание. Ние силно препоръчваме да не използвате тази функция за нещо, което не искате да върнете отново.

СИГНАЛИ

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

ПРИМЕРИ

Разпечатайте и сортирайте имената за вход на всички потребители: BEGIN {FS = ":"} {print $ 1 | " print" FNR, $ 0} Съкратете и номера на реда (вариант на тема): {print NR, {print null} $ 0}

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

Константите на низовете са последователности от знаци, включени в двойни кавички. В не-англоговорящи среди е възможно да се маркират струните в програмата AWK като изискващи превод на естествения естествен език. Такива струни са маркирани в програмата AWK с водещо подчертание (`` _ ''). Например,

gawk 'НАЧАЛО {отпечатай "Здравей, свят"}'

винаги отпечатва здравей, свят . Но,

gawk 'BEGIN {print _ "Здравей, свят"}'

може да печата bonjour, monde във Франция.

Съществуват няколко стъпки, които са свързани с изготвянето и провеждането на локализираща се AWK програма.

1.

Добавете действие BEGIN, за да зададете стойност на променливата TEXTDOMAIN, за да зададете текстовия домейн на име, свързано с вашата програма.


За начало {TEXTDOMAIN = "myprog"}

Това позволява на Gawk да намери .mo файла, свързан с вашата програма. Без тази стъпка, Gawk използва текстовия домейн на съобщенията , който вероятно не съдържа преводи за вашата програма.

2.

Маркирайте всички струни, които трябва да бъдат преведени с водещи долни черти.

3.

Ако е необходимо, използвайте функциите dcgettext () и / или bindtextdomain () във вашата програма, както е подходящо.

4.

Изпълнете gawk --gen-po -f myprog.awk> myprog.po, за да генерирате .po файл за вашата програма.

5.

Осигурете подходящи преводи и създайте и инсталирайте съответния .mo файл.

Функциите за интернационализация са описани подробно в GAWK: Ефективно AWK програмиране .

Съвместимост с Posix

Основната цел на Gawk е съвместимостта с POSIX стандарта, както и с най-новата версия на UNIX awk . За тази цел Gawk включва следните видими функции на потребителя, които не са описани в книгата AWK, но са част от версията Bell на awk и са в POSIX стандарт.

Книгата показва, че присвояването на променлива на командния ред се случва, когато awk иначе ще отвори аргумента като файл, който е след изпълнението на блока BEGIN . Въпреки това, при по-ранни реализации, когато подобно задание се появи преди имената на файловете, задаването ще се случи преди да бъде стартиран блока BEGIN . "Когато функцията awk бе променена така, че да съответства на нейната документация, опцията -v за задаване на променливи преди изпълнението на програмата бе добавено, за да се приспособят към приложенията, които зависят от старото поведение. (Тази характеристика бе договорена както от Bell Laboratories, така и от разработчиците на GNU.)

Опцията -W за конкретни функции за внедряване е от POSIX стандарт.

Когато обработваме аргументи, Gawk използва специалната опция `` - '', за да сигнализира края на аргументите. В режим на съвместимост, той предупреждава, но по друг начин игнорира неопределени опции. При нормална работа такива аргументи се предават на програмата AWK, за да бъдат обработвани.

Книгата AWK не определя връщащата стойност на srand () . Стандартът POSIX връща семето, което използва, за да позволи да се следи последователността от произволни числа. Затова srand () в gawk връща и сегашното си семе.

Други нови функции са: Използването на няколко опции (от MKS awk ); масивът ENVIRON ; \ a , и \ v изходните последователности (направени първоначално в проблясък и върнати обратно в Bell Laboratories версия); вградените функции tolower () и toupper () (от версията Bell Laboratories); и спецификациите за преобразуване ANSI C в printf (направени първо във версията на Bell Laboratories).

Исторически характеристики

Има две функции на историческите реализации на AWK, които поддържат. Първо, възможно е да се извика дължината () вградена функция не само без аргумент, но дори без скоби! По този начин,

a = дължина # Holy Algol 60, Batman!

е същият като всеки от тях

a = дължина ()
a = дължина ($ 0)

Тази функция е означена като "deprecated" 'в POSIX стандарта и gawk издава предупреждение за нейната употреба, ако --lint е зададен на командния ред.

Другата особеност е използването на изявленията за продължаване или за прекъсване извън тялото на известно време , за или за правене на цикъл. Традиционните реализации на AWK са разглеждали подобно използване като еквивалентно на следващото изявление. Gawk поддържа тази употреба, ако е определена - традиционна .

Разширения на GNU

Gawk има редица разширения на POSIX awk . Те са описани в този раздел. Всички разширения, описани тук, могат да бъдат деактивирани, като се извика gawk с опцията - традиционна .

Следните функции на gawk не са налични в POSIX awk .

*

Не се извършва търсене на път за файлове, наречени чрез опцията -f . Поради това променливата на средата AWKPATH не е специална.

*

Последователността \ x escape. (Забранено с --posix .)

*

Функцията fflush () . (Забранено с --posix .)

*

Способността да продължите линиите след това ? и :. (Забранено с --posix .)

*

Октавни и шестнадесетични константи в програмите AWK.

*

Променливите ARGIND , BINMODE , ERRNO , LINT , RT и TEXTDOMAIN не са специални.

*

Променливата IGNORECASE и нейните странични ефекти не са налични.

*

Разделянето FIELDWIDTHS на полето и фиксираната ширина.

*

Масивът PROCINFO не е налице.

*

Използването на РС като регулярен израз.

*

Специалните имена на файлове, налични за пренасочване на I / O, не се разпознават.

*

Операторът | & за създаване на ко-процеси.

*

Способността да се разделят отделни знаци, като се използва нулевият низ като стойност на FS , и като трети аргумент за разделяне () .

*

Незадължителният втори аргумент към функцията close () .

*

По избор третия аргумент към функцията за съвпадение () .

*

Способността да се използват позиционни спецификатори с printf и sprintf () .

*

Използването на масив за изтриване за изтриване на цялото съдържание на масив.

*

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

*

И () , asort () , bindtextdomain () , compl () , dcgettext () , gensub () , lshift () , mktime () и xor () .

*

Локализиращи струни.

*

Добавяне на нови вградени функции динамично с функцията extension () .

Книгата AWK не определя връщащата стойност на функцията close () . Затварянето () на Gawk връща стойността от fclose (3) или pclose (3), съответно при затваряне на изходящ файл или тръба. Той връща изходното състояние на процеса при затваряне на входната тръба. Стойността на връщането е -1, ако избраният файл, тръба или ко-процес не е отворен с пренасочване.

Когато gawk се извиква с опцията --traditional , ако аргументът fs към опцията -F е `` t '', тогава FS се задава на символа на раздел. Обърнете внимание, че натискането на gawk -F \ t ... просто причинява черупката да цитира "t", и не предава "` t \ "до опцията -F . Тъй като това е доста грозен специален случай, това не е по подразбиране поведение. Това поведение също не се случва, ако е зададен --posix . За да получите наистина разделител като сепаратор на поле, най-добре е да използвате единични кавички: gawk -F '\ t' ....

Вижте други команди : изчакайте , lp , complete , execv , getfacl , ioctl , uniq , rmmod , pvcreate , rsh , unix2dos , cal , fs , cd , iwpriv , swapon , autofs , в , кой , iwconfig , ifconfig , vgdisplay , отворен , lsmod , ntohs , mailq , kill , wtmp