Запознајте се со командата за Linux - gawk

Име

gawk - образец скенирање и обработка на јазикот

Синопсис

gawk [POSIX или GNU стил опции] -f програма-датотека [ - ] датотека ...
gawk [POSIX или GNU стил опции] [ - ] програма-текстуална датотека ...

pgawk [POSIX или GNU стил опции] -f програма-датотека [ - ] датотека ...
pgawk [POSIX или GNU стил опции] [ - ] програма-текстуална датотека ...

Опис

Gawk е имплементација на GNU проектот на програмскиот јазик на AWK. Тоа е во согласност со дефиницијата на јазикот во POSIX 1003.2 командниот јазик и комуналните услуги. Оваа верзија за возврат се базира на описот на AWK програмскиот јазик , од Ахо, Керниган и Вајнбергер, со дополнителни функции кои се наоѓаат во системот V верзија 4 на UNIX awk . Gawk, исто така, обезбедува понови Bell Labatories awk екстензии, како и голем број на GNU-специфични екстензии.

Pgawk е профилирање верзија на gawk . Истата е идентична на секој начин да gawk , освен што програмите работат побавно, и автоматски создава профил за извршување во датотеката awkprof.out кога е завршена. Погледнете ја опцијата --профил , подолу.

Командната линија се состои од опции за gawk себе, текстот на програмата AWK (ако не е обезбеден преку опциите -f или --file ) и вредности што треба да бидат достапни во ARGC и ARGV претходно дефинираните AWK варијабли.

Опција Формат

Опциите Gawk може да бидат или традиционални POSIX опции за една буква, или долги опции на GNU стил. Опциите POSIX започнуваат со еден `` - '', додека долгите опции започнуваат со `` - ''. Долго се предвидени можности за специфичните карактеристики на ГНУ и за POSIX-манифестираните функции.

Следејќи го POSIX стандардот, gawk- специфичните опции се обезбедуваат преку аргументи на опцијата -W . Може да се обезбедат повеќе -W опции. Секоја -W опција има соодветна долга опција, како што е наведено подолу. Аргументите за долгите опции се поврзани со опцијата со знак = без интервенирачки простори или може да се обезбедат во следниот аргумент за командната линија. Долгите опции може да се скратат, сѐ додека кратенката останува единствена.

Опции

Gawk ги прифаќа следниве опции, наведени по азбучен ред.

-F fs

- поле-сепаратор fs Користете fs за полето за внесување на полето (вредноста на FS претходно дефинирана променлива).

-v var = вал

- assign var = val Доделете ја вредност val на променливата var , пред да започне извршувањето на програмата. Ваквите променливи вредности се достапни за блокот BEGIN на програмата AWK.

-f програма-датотека

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

-Мф. ННН

-mr NNN Поставете различни ограничувања на меморијата на вредноста NNN . Знамето f го поставува максималниот број на полиња, а знамето r поставува максимална големина на евиденција. Овие две знамиња и опцијата -m се од истражувачката верзија на Bell Laboratories на UNIX awk . Тие се игнорираат од gawk , бидејќи gawk нема претходно дефинирани граници.

-W compat

-В традиционален

- компот

- Традиционално Стартувај во режим на компатибилност . Во режим на компатибилност, gawk се однесува идентично на UNIX awk ; не се препознаваат ниту една од екстензии специфични за ГНУ. Употребата на --традиционално е најпосакувана во однос на другите форми на оваа опција. Погледнете GNU EXTENSIONS , подолу, за повеќе информации.

-В копилефт

-В авторските права

--copyleft

--copyright Печати ја кратката верзија на информативната порака за авторски права на GNU на стандардниот излез и излегува успешно.

-W депонија-променливи [ = датотека ]

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

Имајќи листа на сите глобални променливи е добар начин да се бараат типографски грешки во вашите програми. Исто така, ќе ја користите оваа опција ако имате голема програма со многу функции и сакате да бидете сигурни дека вашите функции не ненамерно ги користат глобалните променливи за кои сакавте да бидат локални. (Ова е особено лесно да се направи со едноставни променливи имиња како i , j , и така натаму.)

-Во помош

-W употреба

- помош

--usage Печатете релативно кратко резиме на достапните опции на стандардниот излез. (Според стандардите за кодирање на GNU , овие опции предизвикуваат итен, успешен излез.)

-W lint [ = фатална ]

--lint [ = фатална ] Дајте предупредувања за конструкции кои се сомнителни или не-преносливи за другите имплементации на AWK. Со факултативен фалсификат , предупредувањата за постелнина стануваат фатални грешки. Ова може да биде драстично, но неговата употреба сигурно ќе го поттикне развојот на почисти AWK програми.

-Не-старо

- старост Обезбедете предупредувања за конструкции кои не се преносливи на оригиналната верзија на Unix awk .

-W gen-po

--gen-po Скенирајте и анализирајте ја програмата AWK и генерирајте датотека на GNU .po формат на стандарден излез со записи за сите локализирани жици во програмата. Самата програма не е извршена. Погледнете ја дистрибуцијата на ГЕТ дистрибуција за повеќе информации за .po датотеките.

-Н не-децимални податоци

- не-децимални податоци Препознавање на осум и хексадецимални вредности во влезните податоци. Користете ја оваа опција со голема претпазливост!

-W posix

--posix Ова го вклучува режимот на компатибилност со следниве дополнителни ограничувања:

*

\ x избега секвенци не се препознаваат.

*

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

*

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

*

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

*

Операторите ** и ** = не можат да се користат наместо ^ и ^ = .

*

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

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

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

-Во ре-интервал

--re-interval Овозможете користење на интервални изрази во совпаѓањето со регуларниот израз (види Редовни изрази , подолу). Интервалните изрази традиционално не беа достапни во AWK јазикот. Стандардот POSIX ги додаде, за да направи awk и egrep во согласност едни со други. Сепак, нивната употреба најверојатно ќе ги прекине старите AWK програми, па gawk ги обезбедува само ако се бара со оваа опција, или кога е назначено --posix .

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

--source -text-текст Користете програмски текст како изворниот код на програмата AWK. Оваа опција овозможува лесно поместување на функциите на библиотеката (се користи преку опциите -f и -file ) со изворниот код внесен во командната линија. Таа е наменета првенствено за средни до големи AWK програми користени во школка скрипти.

-W верзија

--version Информации за верзијата за печатење за оваа конкретна копија на gawk на стандардниот излез. Ова е корисно, главно, за да се знае дали моменталната копија на gawk на вашиот систем е ажурирана во однос на она што Фондацијата за слободен софтвер ја дистрибуира. Ова исто така е корисно кога известувате грешки. (Според стандардите за кодирање на GNU , овие опции предизвикуваат итен, успешен излез.)

- Сигнализирајте го крајот на опциите. Ова е корисно да се дозволи понатамошни аргументи на AWK самата програма да започне со `` - ''. Ова е главно за конзистентност со конвенцијата за парсирање на аргументи што ја користат повеќето други POSIX програми.

Во режим на компатибилност, сите други опции се обележани како неважечки, но на друг начин се игнорираат. При нормално функционирање, додека текстот на програмата е доставен, непознати опции се пренесуваат на програмата AWK во низата ARGV за обработка. Ова е особено корисно за извршување на AWK програмите преку механизмот за извршување на "#!" Извршен преведувач.

Извршување на AWK ПРОГРАМА

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

шема { акција извештаи }

име на функција ( листа со параметри ) { извештаи }

Gawk прво го чита изворот на програмата од програмските датотеки ако е одреден, од аргументи до --source , или од првиот не-опција аргумент на командната линија. Опциите -f и -source можат да се користат неколку пати на командната линија. Gawk го чита текстот на програмата како да се конкатенираат сите програмски-датотеки и изворни текстови на командната линија. Ова е корисно за градење на библиотеки на AWK-функции, без да се вклучуваат во секоја нова AWK-програма што ги користи. Таа, исто така, обезбедува способност да се меша библиотечни функции со програмите на командната линија.

Променливата на околината AWKPATH ја одредува патеката за пребарување која ќе се користи при наоѓање на изворни датотеки со име -f . Ако оваа променлива не постои, основната патека е ".: / Usr / local / share / awk" . (Вистинскиот директориум може да се разликува, во зависност од тоа како gawk е изграден и инсталиран.) Ако името на датотеката дадено на опцијата -f содржи знак `` / '', не се извршува пребарување на патеки.

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

Ако името на датотеката во командната линија има форма var = val се третира како променлива задача. Променливата var ќе биде доделена вредност val . (Ова се случува откако било кој блок (и) на BEGIN се стартува.) Доделувањето на променливите на командната линија е најкорисно за динамичко доделување на вредностите на променливите што ги користи AWK за контрола на тоа како влезот е поделен во полиња и записи. Исто така е корисно за контролирање на состојбата ако се потребни повеќе поминувања преку една датотека со податоци.

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

За секој запис во влезот, gawk тестови за да се види дали се совпаѓа со било кој модел во програмата AWK. За секој модел што рекордот се совпаѓа, асоцијативното дејство се извршува. Шаблоните се тестираат според редоследот што го имаат во програмата.

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

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

AWK променливите се динамични; тие доаѓаат во постоење кога се користат за прв пат. Нивните вредности се или броеви со броеви или жици со лебдечки точки, или и двете, во зависност од тоа како се користат. AWK, исто така, има една димензионална низа; низи со повеќе димензии може да се симулираат. Неколку претходно дефинирани променливи се поставени како програмски работи; овие ќе бидат опишани како што е потребно и сумирани подолу.

Рекорди

Вообичаено, записите се одделени со знаци на нова линија. Можете да контролирате како евиденцијата се одвојува со доделување вредности на вградената променлива RS . Ако РС е секој единствен карактер, тој карактер ги одделува записите. Инаку, РС е регуларен израз. Текстот во влезот што се совпаѓа со овој регуларен израз го одделува записот. Меѓутоа, во режим на компатибилност, само за првиот карактер на неговата низа вредност се користи за одделување на записи. Ако РС е поставена на нула низа, тогаш евиденцијата се одделува со празни линии. Кога RS е поставен на нула низа, карактерот на нова линија секогаш дејствува како сепаратор на поле, покрај она што вредноста FS може да ја има.

Полиња

Како што се чита секој влез, gawk го дели рекордот во полиња , користејќи ја вредноста на променливата FS како сепаратор на полето. Ако FS е единствен знак, полињата се одделени со тој карактер. Ако FS е нула низа, тогаш секој поединечен знак станува посебно поле. Инаку, FS се очекува да биде целосен регуларен израз. Во посебен случај кога FS е единствен простор, полињата се одделени со траги од простори и / или јазичиња и / или нови линии. (Но, видете ја дискусијата за - пописот , подолу). ЗАБЕЛЕШКА: Вредноста на IGNORECASE (види подолу), исто така, влијае на тоа како полињата се поделени кога FS е регуларен израз и како евиденцијата се одвојува кога RS е регуларен израз.

Ако променливата FIELDWIDTHS е поставена на листа од броеви што е одвоена од простор, секое поле се очекува да има фиксна ширина, а gawk ќе го подели рекордот користејќи ги наведените ширини. Вредноста на FS е игнорирана. Доделувањето нова вредност на FS ја надминува употребата на FIELDWIDTHS и го враќа стандардното однесување.

Секое поле во влезниот запис може да се референцира според неговата позиција, $ 1 , $ 2 , и така натаму. 0 е целиот запис. Полињата не треба да се референцираат од константи:

n = 5
печати $ n

го отпечати петтото поле во влезниот запис.

Променливата NF е поставена на вкупниот број на полиња во влезниот запис.

Референци на непостоечки полиња (т.е. полиња по $ NF ) произведуваат нула-низа. Сепак, доделувањето на непостоечко поле (на пример, $ (NF + 2) = 5 ) ја зголемува вредноста на NF , создава секакви интервенирани полиња со нула низа како нивната вредност и предизвикува повторно да се пресмета вредноста од 0 , со полињата се одделени со вредноста на OFS . Повикувањата на негативно нумерирани полиња предизвикуваат фатална грешка. Намалувањето на NF предизвикува вредностите на полињата што минуваат низ новата вредност да се изгубат, а вредноста на 0 за повторно да се пресмета, при што полињата се одделени со вредноста на OFS .

Доделувањето на вредност на постоечко поле предизвикува целиот рекорд да биде повторно изграден кога се референцира $ 0 . Слично на тоа, доделувањето вредност до $ 0 предизвикува записот да се размножува, создавајќи нови вредности за полињата.

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

Вградените варијабли на Gawk се:

ARGC

Бројот на аргументите на командната линија (не вклучува опции за gawk , или програмскиот извор).

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 ). Промената на оваа низа не влијае на околината што ја гледаат програмите кои gawk се појавува преку пренасочување или функцијата system () .

ERRNO

Ако се појави системска грешка или прави пренасочување за добивање на линијата , за време на читање за getline , или за време на затворање () , тогаш ERRNO ќе содржи низа која ја опишува грешката. Вредноста е предмет на превод во не-англиски локалитети.

FIELDWIDTHS

Листа со полево пропустливост одвоена од бело-простор. Кога е поставен, gawk го анализира влезот во полиња со фиксна ширина, наместо да ја користи вредноста на променливата FS како сепаратор на полето.

ИМЕ НА ДАТОТЕКА

Името на тековната влезна датотека. Ако во командната линија не се специфицирани никакви датотеки, вредноста на FILENAME е `` - ''. Сепак, FILENAME не е дефиниран во блокот BEGIN (освен ако не е поставен преку getline ).

FNR

Влезниот рекорд број во тековната влезна датотека.

FS

Селекторот за внесување на поле, стандардно место. Видете Полиња , погоре.

IGNORECASE

Ја контролира случај-сензитивноста на сите регуларни изразувања и низа операции. Ако IGNORECASE има ненулезна вредност, тогаш споредбите со низи и појавување на шаблони во правилата, поделба на теренот со FS , запишување одвојување со RS , регуларниот израз кој се совпаѓа со ~ и ! ~ , И gensub () , gsub () , index () , match () , split () и sub () вградени функции, сите игнорираат случај кога прават операции за регуларен израз. ЗАБЕЛЕШКА: Индексот на низи не е засегнат, ниту пак функцијата asort () .

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

LINT

Обезбедува динамична контрола на опцијата --lint од програмата AWK. Кога е точно, gawk отпечатоци на предупредувања за коса. Кога е лажно, тоа не е така. Кога му е доделена вредноста на стрингот "фатална" , предупредувањата за постелнина стануваат фатални грешки, исто како и - lint = фатални . Секоја друга вистинска вредност само печати ги предупредувањата.

NF

Бројот на полиња во тековниот влезен запис.

NR

Вкупниот број на влезни записи досега видени.

OFMT

Излез формат за броеви, "% .6g" , по дифолт.

OFS

Селекторот за излезното поле, стандардно место.

ORS

Излезот рекорд сепаратор, по дифолт нова линија.

PROCINFO

Елементите од оваа низа обезбедуваат пристап до информации за активната AWK програма. Во некои системи, може да постојат елементи во низата, "group1" преку "group n " за некои n , што е бројот на дополнителни групи што ги има процесот. Користете го операторот за тестирање на овие елементи. Следниве елементи се загарантирани да бидат достапни:

PROCINFO ["egid"]

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

PROCINFO ["euid"]

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

PROCINFO ["FS"]

"FS" ако е ефект на поделба на поле со FS , или "FIELDWIDTHS" ако полето се дели со FIELDWIDTHS е во сила.

PROCINFO ["gid"]

вредноста на системскиот повик getgid (2).

PROCINFO ["pgrpid"]

идентификацијата на процесната група на тековниот процес.

PROCINFO ["pid"]

процесот на проект на тековниот процес.

PROCINFO ["ppid"]

идентификацијата на матичниот процес на тековниот процес.

PROCINFO ["uid"]

вредноста на системскиот повик на getuid (2).

РС

Влезниот рекорд сепаратор, по дифолт нова линија.

RT

Рекордот терминатор. Gawk го поставува RT на влезниот текст што одговара на карактерот или регуларниот израз што го навел РС .

RSTART

Индексот на првиот карактер исти со совпаѓање () ; 0 ако нема натпревар. (Ова значи дека индексите на знаците започнуваат во еден.)

RLENGTH

Должината на стрингот се совпаѓа со совпаѓање () ; -1 ако не се совпаѓаат.

SUBSEP

Карактерот кој се користи за одделување на повеќе индекси во елементите на низата, по правило "\ 034" .

TEXTDOMAIN

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

Низи

Низите се индексирани со израз помеѓу квадратните загради ( [ и ] ). Ако изразот е израз листа ( expr , expr ...) тогаш индексот на низата е стринг кој се состои од конкатенација на (низа) вредност на секој израз, разделен со вредноста на SUBSEP променливата. Овој објект се користи за симулирање множества со димензионирани низи. На пример:

i = "A"; j = "B"; k = "C"
x [i, j, k] = "здраво, свет \ n"

доделува низа "здраво, свет \ n" на елементот на низата x која е индексирана со низата "A \ 034B \ 034C" . Сите низи во AWK се асоцијативни, односно индексирани со низа вредности.

Специјалниот оператор во може да се користи во изјава ако или додека да се види дали низата има индекс кој се состои од одредена вредност.

ако (вал во низа) низа за печатење [val]

Ако низата има повеќе индекси, користете (i, j) во низата .

Во конструкцијата, исто така, може да се користи во циклус за да се повтори над сите елементи на низата.

Еден елемент може да биде избришан од низа користејќи ја изјавата за бришење . Изјавата за бришење исто така може да се искористи за да се избрише целата содржина на низата, само со наведување на името на низата без индекс.

Променливо пишување и конверзија

Променливите и полињата може да бидат броеви, или жици (или подвижна запирка) или и двете. Како вредноста на променливата се толкува зависи од нејзиниот контекст. Ако се користи во нумерички израз, ќе се третира како број, ако се користи како стринг, ќе се третира како стринг.

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

Кога низата мора да се претвори во број, конверзијата се остварува со користење strtod (3). Бројот се конвертира во низа со користење на вредноста на CONVFMT како стринг за формат за sprintf (3), со нумеричка вредност на променливата како аргумент. Сепак, иако сите броеви во AWK се подвижна точка, интегралните вредности секогаш се претвораат како цели броеви. Така, дадена

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

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

Gawk врши споредби на следниов начин: Ако две променливи се нумерирани, тие се споредуваат нумеричко. Ако една вредност е нумеричка, а другата има низа вредност која е `` нумеричка низа '', тогаш споредбите се прават и нумерички. Во спротивно, нумеричката вредност се претвора во низа и се прави споредба со низа. Се разбира, две жици се споредуваат како низи. Забележете дека POSIX стандардот го применува концептот на `` нумерички низа '' насекаде, дури и кон константи на низа. Сепак, ова е јасно неточно, и gawk не го прави тоа. (За среќа, ова е фиксирано во следната верзија на стандардот.)

Забележете дека низа константи, како што е "57" , не се нумерички низи, тие се низа константи. Идејата за `` нумерички низа '' се однесува само на полиња, влезни линии , FILENAME , ARGV елементи, ENVIRON елементи и елементи на низа создадена од split (), кои се нумерички низи. Основната идеја е дека корисникот влез , и само корисник влез, кој изгледа нумерички, треба да се третираат на тој начин.

Неиницијализираните променливи имаат нумеричка вредност 0 и вредноста на "" низата (нула, или празна, стринг).

Октални и хексадецимални константи

Почнувајќи од верзијата 3.1 на gawk, можете да ги користите C-style октални и хексадецимални константи во Вашиот AWK-програмски изворен код. На пример, окталната вредност 011 е еднаква на децимална 9 , а хексадецималната вредност 0x11 е еднаква на децималната 17.

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

Константите на стрингови во АВК се секвенци на знаци затворени помеѓу двојни цитати ( " ). Во рамките на низи, се препознаваат одредени избезни секвенци , како во C. Овие се:

\\

А буквална обратна коса црта.

\ а

Карактерот "предупредување"; обично ASCII BEL карактер.

\ b

backspace.

\ f

форма-feed.

\ n

нова линија.

\ r

враќање на превозот.

\ t

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

\ v

вертикален таб.

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

Ликот претставен со низа хексадецимални цифри по \ x . Како и во ANSIC, сите следни хексадецимални цифри се сметаат за дел од бегствоната секвенца. (Оваа карактеристика треба да ни каже нешто за јазичниот дизајн од страна на комисијата.) На пример, "\ x1B" е карактерот ASCIIESC (бегство).

\ ddd

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

\ c

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

Бегство секвенци, исто така, може да се користи во постојани регуларни изрази (на пример, / [\ t \ f \ n \ r \ v] / се совпаѓа со бели букви).

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

Модели и акции

AWK е линија-ориентиран јазик. Моделот доаѓа прво, а потоа акцијата. Изјавите за акција се приложени во { и } . Или моделот може да недостасува, или акцијата може да недостасува, но, се разбира, не и двете. Ако моделот недостасува, акцијата се извршува за секој запис на влез. Акција што недостасува е еквивалентна на

{print}

кој го печати целиот рекорд.

Коментарите започнуваат со знакот `` # '' и продолжуваат до крајот на линијата. Празни линии може да се користат за одделување на изјави. Нормално, изјавата завршува со нова линија, сепак, ова не е случај за линии што завршуваат со ``, '', { , ? , : ,, && , или || . Линиите што завршуваат или не, исто така, нивните изјави автоматски продолжиле на следната линија. Во други случаи, линијата може да се продолжи со завршување со ', во кој случај новата линија ќе биде игнорирана.

Повеќекратни изјави може да се стават на една линија, одвојувајќи ги со ``; '' '. Ова се однесува и на изјавите во рамките на акциониот дел на пар-шема-акција (вообичаен случај), и на самите изјавите на шаблонот-акција.

Шаблони

AWK обрасците може да бидат еден од следниве:

BEGIN END / редовен израз / шема на релациона експресија & шема на шема || шема шема ? шема : шема ( шема ) ! шема pattern1 , pattern2

BEGIN и END се два посебни видови на обрасци кои не се тестираат против влезот. Активните делови на сите BEGIN модели се споени како сите изјави да бидат напишани во еден BEGIN блок. Тие се извршуваат пред да се прочита кој било влез. Слично на тоа, сите END- блокови се споени и се извршуваат кога целиот влез е исцрпен (или кога е изведена изјава за излез ). Обрасците BEGIN и END не можат да се комбинираат со други шаблони во изразените модели. BEGIN и END- образецте неможе да ги исфрлат акциите.

За / регуларен израз / обрасци, придружната изјава се извршува за секој влезен запис што се совпаѓа со регуларниот израз. Редовните изрази се исти како оние во egrep (1), и се сумирани подолу.

Релациониот израз може да користи било кој од операторите дефинирани подолу во делот за активности. Овие обично тестираат дали одредени полиња се совпаѓаат со одредени регуларни изрази.

На && , || , и ! операторите се логични и логички ИЛИ и логички НЕ, соодветно, како во C. Тие прават краток спој, како и во C, и се користат за комбинирање на попримитивни изрази на шаблони. Како и во повеќето јазици, загради може да се користат за промена на редоследот на евалуацијата.

Операторот ?: Е како ист оператор во C. Ако првиот модел е вистина тогаш моделот кој се користи за тестирање е вториот модел, инаку тоа е третиот. Само еден од вториот и третиот образец се оценува.

Образецот pattern1 , pattern2 на израз се нарекува опсег шема . Се поклопува со сите записи за влез, почнувајќи со запис кој се совпаѓа со pattern1 , и продолжува сè до запис што се совпаѓа со pattern2 . Не се комбинира со друг вид на израз на модел.

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

Редовните изрази се проширен вид пронајден во egrep . Тие се составени од знаци како што следува:

в

одговара на не-metacharacter в .

\ c

се совпаѓа со буквалниот знак c .

.

се совпаѓа со секој лик, вклучувајќи ја и новата линија.

^

се совпаѓа со почетокот на стрингот.

$

се совпаѓа со крајот на стрингот.

[ abc ... ]

листа на ликови, се совпаѓа со било кој од ликовите abc ....

[^ abc ... ]

негирана листа на знаци, се совпаѓа со секој знак освен abc ....

r1 | r2

алтернација: се совпаѓа или со r1 или r2 .

r1r2

конкатенација: се совпаѓа r1 , а потоа r2 .

r +

одговара на еден или повеќе r .

r *

се совпаѓа со нула или повеќе r .

r ?

се совпаѓа со нула или еден.

( r )

групирање: се совпаѓа r .

r { n }

r { n ,}

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

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

\ y

се совпаѓа со празна низа на почетокот или на крајот на зборот.

\ B

се совпаѓа со празната низа во еден збор.

\ <

се совпаѓа со празен стринг на почетокот на зборот.

\>

се совпаѓа со празен стринг на крајот на зборот.

\ w

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

\ W

се совпаѓа со секој лик кој не е составен од зборови.

\ `

се совпаѓа со празен стринг на почетокот на тампон (стринг).

\ '

се совпаѓа со празната низа на крајот на тампон.

Бескрајните секвенци кои се валидни во низа константи (видете подолу) се исто така валидни во регуларни изрази.

Класите на знаци се нова карактеристика воведена во POSIX стандардот. Класа на знаци е посебна ознака за опишување на списоци на знаци кои имаат специфичен атрибут, но каде што самите фактички ликови можат да се разликуваат од земја до земја и / или од карактер во собата на карактери. На пример, поимот за она што е азбучен карактер се разликува во САД и во Франција.

Класа на знаци е валидна само во регуларен израз во заградите на листите. Класите на знаци се состојат од [: , клучен збор што ја означува класата, и :] . Класите на знаци дефинирани со POSIX стандардот се:

[: alnum:]

Алфанумерички знаци.

[: alpha:]

Азбучни букви.

[: празна:]

Просторни или јазични знаци.

[: cntrl:]

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

[: цифра:]

Нумерички карактери.

[:графикон:]

Карактери кои се и печатени и видливи. (Просторот може да се печати, но не е видлив, додека а е и двете.)

[:пониско:]

Мали букви алфабетски знаци.

[: печатење:]

Карактер за печатење (знаци кои не се контролни знаци.)

[: punct:]

Карактери за интерпункција (знаци кои не се писмо, цифри, контролни знаци или знаци за празно место).

[: простор:]

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

[: горниот:]

Алфабетски букви од горниот случај.

[: xdigit:]

Карактери кои се хексадецимални цифри.

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

Два дополнителни специјални секвенци можат да се појават во листите на знаци. Овие се однесуваат на множества на знаци кои не се ASCII, кои можат да имаат единечни симболи (наречени елементи за собирање ) кои се претставени со повеќе од еден карактер, како и неколку знаци кои се еквивалентни за собирање или сортирање цели. (На пример, на француски, обичен "е" и гробо-акцентиран e "се еквивалентни.)

Симулирање на симболи

Симбол за обележување е елемент за множество карактери ограден во [. и .] . На пример, ако ch е елемент за собирање, тогаш [[.ch.]] Е регуларен израз кој се совпаѓа со овој елемент за собирање, додека [ch] е регуларен израз кој се совпаѓа со c или h .

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

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

Овие карактеристики се многу корисни во не-англиски јазик локации. Функциите на библиотеката кои gawk ги користи за појавување на регуларниот израз моментално само ги препознаваат класи на POSIX карактери; тие не препознаваат симболи за обележување или класи на еквивалентност.

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

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

Нема опции

Во стандардниот случај, gawk ги обезбедува сите објекти на POSIX регуларни изрази и операторите за регуларно изразување GNU опишани погоре. Сепак, интервалните изрази не се поддржани.

- место

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

- Традиционален

Традиционалните Unix awk регуларни изрази се исти. Операторите на ГНУ не се посебни, интервалните изрази не се достапни, ниту пак се класи на POSIX карактери ( [[: alnum:]] и така натаму). Карактерите опишани со октални и хексадецимални избегнувачки секвенци се третираат буквално, дури и ако тие претставуваат мешаници на регуларниот израз.

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

Дозволи интервални изрази во регуларни изрази, дури и ако е обезбедено --традиционално .

Акции

Изјавите за акција се затворени со загради, { и } . Изјавите за акција се состојат од вообичаените задачи за доделување, условни и циклуси кои се наоѓаат на повеќето јазици. Операторите, контролните извештаи и влезните / излезните изводи се распоредени по оние во C.

Оператори

Операторите во AWK, по редослед на опаѓање, се

( ... )

Групирање

$

Референца на поле.

++ -

Зголемување и намалување, и префикс и постфикс.

^

Експоненција ( ** може исто така да се користи и ** = за операторот на задачата).

+ -!

Унарниот плус, унарниот минус и логичката негација.

* /%

Множење, поделба и модул.

+ -

Дополнување и одземање.

простор

Стринг конкатенација.

<>

<=> =

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

~! ~

Регулација на регуларниот израз, негиран натпревар. ЗАБЕЛЕШКА: Не користете постојан регуларен израз ( / foo / ) на левата страна од ~ или ! ~ . Користете само еден од десната страна. Изразот / foo / ~ exp го има истото значење како и (($ 0 ~ / foo /) ~ exp ) . Ова обично не е она што беше наменето.

во

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

&&

Логичка и.

||

Логичка ИЛИ.

?:

C условен израз. Ова има форма expr1 ? expr2 : expr3 . Ако expr1 е вистина, вредноста на изразот е expr2 , во спротивно е expr3 . Се проценува само еден од expr2 и expr3 .

= + = - =

* = / =% = ^ = Доделување. Поддржани се и апсолутната задача ( var = вредност ) и назначувањето на операторот (другите форми).

Контролни извештаи

Контролните извештаи се како што следува:

( изјава ) изјава додека ( услови ) за изјава ( expr1 ; expr2 ; expr3 ) за изјава за прекин на изјава ( var in array ) продолжи да ја избришете низата [ индекс ] избришете излез од низата [ израз ] { извештаи }

Изјави за I / O

Изјави за влез / излез се како што следува:

затвори ( датотека [ , како ] )

Затвори датотека, цевка или ко-процес. Опционално како треба да се користи само при затворање на еден крај од двонасочната цевка до ко-процес. Мора да биде стринг вредност, или "до" или "од" .

getline

Поставете $ 0 од следниот влезен запис; постави NF , NR , FNR .

getline < датотека

Поставете $ 0 од следниот запис на датотека ; постави НФ .

getline var

Поставете var од следниот запис за влез; постави NR , FNR .

getline var < датотека

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

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

Извршете ја командата да го насочите излезот или во $ 0 или var , како погоре.

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

Извршете ја командата како копроцесен процес на излез или во $ 0 или var , како погоре. Ко-процесите се продолжеток на гулаб .

следно

Престанете да го обработувате тековниот запис за влез. Следниот влезен запис се чита и обработката започнува со првиот модел во програмата AWK. Доколку се постигне крајот на влезните податоци, блоковите END , ако ги има, се извршуваат.

следната датотека

Стоп за обработка на тековната влезна датотека. Следниот влезен запис за читање доаѓа од следната влезна датотека. FILENAME и ARGIND се ажурираат, FNR се ресетира на 1, а обработката започнува со првиот модел во програмата AWK. Доколку се постигне крајот на влезните податоци, блоковите END , ако ги има, се извршуваат.

печати

Печати тековниот запис. Излезниот запис се прекинува со вредноста на променливата ORS .

печати expr-листа

Печати изрази. Секој израз е одделен од вредноста на OFS променливата. Излезниот запис се прекинува со вредноста на променливата ORS .

print expr-list > датотека

Печати изрази во датотека . Секој израз е одделен од вредноста на OFS променливата. Излезниот запис се прекинува со вредноста на променливата ORS .

printf fmt, expr-листа

Форматирајте и печатете.

printf fmt, expr-list > датотека

Форматирајте и печатете во датотека .

систем ( cmd-line )

Извршете ја командата cmd-line и вратете го излезниот статус. (Ова може да не е достапно кај системи без POSIX.)

fflush ( [ датотека ] )

Измешајте ги сите бафери поврзани со отворената датотека со датотеки или цевката. Ако недостасува датотека , тогаш стандардниот излез се исфрла. Ако датотеката е нула низа, тогаш сите отворени излезни датотеки и цевки имаат испуштени буфери.

Дополнителните излезни пренасочувања се дозволени за печатење и printf .

печати ... >> датотека

додава излез во датотеката .

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

пишува на цевка.

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

испраќа податоци до ко-процес.

Командата getline враќа 0 на крајот од датотеката и -1 на грешка. По грешка, ERRNO содржи низа која го опишува проблемот.

ЗАБЕЛЕШКА: Ако користите цевка или ко-процес да се добие линија , или од печатење или printf во рамките на јамка, мора да користите блиски () за да креирате нови инстанци на командата. AWK автоматски не затвора цевки или ко-процеси кога ќе се врати EOF.

Изјава printf

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

% c

Карактер ASCII. Ако аргументот што се користи за % c е нумерички, тој се третира како карактер и се печати. Инаку, аргументот се претпоставува дека е низа, и е испечатен единствениот прв карактер на таа низа.

% d , % i

Десетичен број (цел број).

% e,% E

Бројот на подвижна запирка од образецот [-] d.dddddde [+ -] dd . Формулата % E користи Е наместо e .

% f

Бројот на подвижна запирка од формуларот [-] ddd.dddddd .

% g,% G

Користете % e или % f конверзија, кое е пократко, со несуштински нули потиснати. Форматот % G користи % E наместо % e .

% o

Непотпишан октален број (исто така цел број).

% u Непотпишан децимален број (повторно, цел број).

% s

А карактер низа.

% x,% X

Непотпишан хексадецимален број (цел број). Формат % X користи ABCDEF наместо abcdef .

%%

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

Дополнително, дополнителни параметри може да лежат помеѓу % и контролната буква:

брои $

Користете го аргументот за пребројување во оваа точка во форматирањето. Ова се нарекува позиционист и е првенствено наменето за употреба во преведени верзии на стрингови за формати, а не во оригиналниот текст на програмата AWK. Тоа е продолжување на гужва .

-

Изразот треба да биде оправдан во својата област.

простор

За нумерички конверзии, префикс позитивни вредности со празно место и негативни вредности со знак минус.

+

Знакот плус, кој се користи пред модификаторот за ширина (видете подолу), вели дека секогаш снабдува знак за нумеричка конверзија, дури и ако податоците што се форматираат се позитивни. + Преовладува просторниот модификатор.

#

Користете `` алтернативна форма '' за одредени контролни букви. За % o , снабдете водечка нула. За % x , и % X , снабдувате водечки 0x или 0X за нула резултат. За % e , % E , и % f , резултатот секогаш содржи децимална точка. За % g , и % G , заостанувачките нули не се отстранети од резултатот.

0

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

ширина

Областа треба да биде поставена на оваа ширина. Областа е нормално поместена со празни места. Ако знакот 0 се користи, тој е поместен со нули.

. пр

Бројот што ја одредува прецизноста да се користи при печатење. За форматите % e , % E и % f , ова го одредува бројот на цифри што сакате да ги печатите десно од децимална точка. За формите на % g и % G , тој го одредува максималниот број на значајни цифри. За форматите % d , % o , % i , % u , % x , и % X , тој го одредува минималниот број на броеви за печатење. За % s , го одредува максималниот број на знаци од стрингот што треба да се испечати.

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

Специјални имиња на датотеки

Кога вршите I / O пренасочување од печатење или printf во датотека, или преку getline од датотека, gawk препознава одредени специјални имиња на датотеки внатрешно. Овие имиња на датотеки овозможуваат пристап до дескриптори на отворени датотеки наследени од родителскиот процес на gawk (обично на школка). Овие имиња на датотеки може да се користат и на командната линија за именување на датотеки со податоци. Името на датотеката се:

/ dev / stdin

Стандардниот влез.

/ dev / stdout

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

/ dev / stderr

Стандардна грешка.

/ dev / fd / n

Датотеката поврзана со дескрипторот на отворен фајл n .

Овие се особено корисни за пораките за грешки. На пример:

Печати "Ти ја разнесеш!" > "/ dev / stderr"

додека инаку би требало да го користите

Печати "Ти ја разнесеш!" | "мачка 1> и 2"

Следниве специјални имиња на датотеки може да се користат со | & & -процесниот оператор за создавање на TCP / IP мрежни конекции.

/ inet / tcp / lport / rhost / rport

Датотеката за TCP / IP конекција на локална порта се прикажува на далечинскиот управувач на домаќинот на далечинскиот управувач . Користете порта од 0 за да имате систем да избере порта.

/ inet / udp / lport / rhost / rport

Слични, но користете UDP / IP наместо TCP / IP.

/ inet / raw / lport / rhost / rport

Резервирано за понатамошна употреба.

Други посебни имиња на датотеки обезбедуваат пристап до информации за процесот на трчање. Овие имиња сега се застарени. Користете ја низата PROCINFO за да ги добиете информациите што ги обезбедуваат. Името на датотеката се:

/ dev / pid

Читањето на оваа датотека го враќа идентификацијата на процесот на тековниот процес, во децимали, престанува со нова линија.

/ dev / ppid

Читањето на оваа датотека го враќа ID на родителскиот процес на тековниот процес, во децимали, престанува со нова линија.

/ dev / pgrpid

Читањето на оваа датотека ја враќа идентификацијата на процесот на групата на тековниот процес, во децимали, престанува со нова линија.

/ dev / корисник

Читањето на оваа датотека враќа единствен запис прекинат со нова линија. Полињата се одделени со празни места. $ 1 е вредноста на системскиот повик getuid (2), $ 2 е вредноста на системскиот повик geteuid (2), $ 3 е вредноста на системскиот повик getgid (2), а $ 4 е вредноста на getegid (2) системски повик. Ако има дополнителни полиња, тие се идентификатори на групата вратени од getgroups (2). Повеќе групи не може да бидат поддржани на сите системи.

Нумерички функции

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

atan2 ( y , x )

Го враќа аркантантот на y / x во радијани.

cos ( expr )

Го враќа косинусот на expr , кој е во радијани.

exp ( expr )

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

int ( expr )

Скратува на цел број.

log ( expr )

Природна логаритамска функција.

rand ()

Враќа случајно број помеѓу 0 и 1.

грев ( expr )

Го враќа синусот на expr , кој е во радијани.

sqrt ( expr )

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

srand ( [ expr ] )

Користи expr како ново семе за генераторот на случаен број. Доколку не е обезбеден израз , се користи времето на денот. Вредноста на враќањето е претходното семе за генераторот на случаен број.

Функции на стринг

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

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

Го враќа бројот на елементи во изворната низа s . Содржината на s се подредени според нормалните правила на Gawk за споредување на вредностите, а индексите на сортираните вредности на s се заменуваат со секвенцијални цели броеви почнувајќи од 1. Ако опцијата за определена дестинација за дестинација d е наведена, тогаш s прво се дуплицира во d , а потоа d е сортирана, оставајќи ги индексите на изворната низа s непроменети.

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

Пребарајте ја целната низа t за совпаѓањата на регуларниот израз r . Ако h е низа која започнува со g или G , тогаш заменете ги сите совпаѓања на r со s . Инаку, h е број кој укажува на тоа кој натпревар од r ќе го замени. Ако не е обезбедено т , наместо тоа се користи $ 0 . Во текстот за замена, секвенцата \ n , каде што n е цифра од 1 до 9, може да се користи за да се покаже само текстот што одговара на n -тиот задебелен под-експресија. Редоследот \ 0 го претставува целиот соодветен текст, како и ликот & . За разлика од sub () и gsub () , модифицираната низа се враќа како резултат на функцијата, а оригиналниот целни стринг не е променет.

gsub ( r , s [ , t ] )

За секој под-подред кој одговара на регуларниот израз r во стрингот t , заменете ја низата s , и вратете го бројот на замени. Ако не е испорачано t , користете $ 0 . Во & заменувачкиот текст се заменува со текстот што всушност беше истиот. Користете \ & за да добиете буквална & . (Ова мора да биде внесено како "\\ &" ; видете GAWK: Ефективно AWK програмирање за поцелосна дискусија за правилата за & s и backslides во заменскиот текст на sub () , gsub () и gensub () .)

индекс ( s , t )

Го враќа индексот на стрингот t во стринг s , или 0 ако t не е присутен. (Ова значи дека индексите на знаците започнуваат во еден.)

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

Ја враќа должината на стрингот s , или должината на $ 0 ако не е обезбедена s .

натпревар ( s , r [ , a ] )

Ја враќа позицијата во s каде што се појавува регуларниот израз r , или 0 ако r не е присутен и ги поставува вредностите на RSTART и RLENGTH . Забележете дека редоследот на аргументите е ист како кај операторот ~ : str ~ re . Ако е обезбедена низа a , a е исчистена, а потоа елементите од 1 до n се пополнуваат со делови од s кои се совпаѓаат со соодветната задебелена под-експресија во r . 0-тиот елемент на а го содржи делот од s кој се совпаѓа со целиот регуларен израз r .

Сплит ( s , a [ , r ] )

Го дели стрингот во низата a на регуларниот израз r и го враќа бројот на полиња. Ако r е испуштен, наместо тоа се користи FS . Низата a е исчистена прво. Раздвојувањето се однесува идентично на поделбата на полето, опишано погоре.

sprintf ( fmt , expr-листа )

Печати expr-листа според fmt , и ја враќа резултирачката низа.

strtonum ( стр )

Испитува str , и ја враќа неговата нумеричка вредност. Ако str започнува со водечки 0 , strtonum () претпоставува дека str е октален број. Ако str започнува со водечки 0x или 0x , strtonum () претпоставува дека str е хексадецимален број.

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

Исто како gsub () , но само првото подповрзување е заменето.

substr ( s , i [ , n ] )

Враќа најмногу n- карактерни подпозиции на s почнувајќи од i . Ако n е испуштено, се користи остатокот од s .

долу ( str )

Враќа копија од стрингот на стрингот, при што сите големи букви во ул се преведени на нивните соодветни колеги од понизок случај. Неазбучните знаци остануваат непроменети.

toupper ( str )

Враќа копија од стрингот на стрингот, со сите мали букви во стрит преведени на нивните соодветни колеги од горниот случај. Неазбучните знаци остануваат непроменети.

Функции за време

Бидејќи една од основните употреби на програмите AWK е обработка на датотеки со лозинки кои содржат информации за временски печат, gawk ги обезбедува следниве функции за добивање на временски марки и нивно форматирање.

mktime ( термин )

Го прегрнува датумот во временска ознака од истата форма како што е вратена од systime () . Датапот е низа од формата ГГГГ ММ ДД ХМ ММ СС [ДСТ] . Содржината на стрингот е шест или седум броеви кои претставуваат соодветна цела година, вклучувајќи век, месец од 1 до 12, денот на месецот од 1 до 31, часот на денот од 0 до 23, минута од 0 до 59, а вториот од 0 до 60, и опционално знаме за заштеда на лет. Вредностите на овие броеви не треба да бидат во определените опсези; на пример, еден час од -1 значи 1 час пред полноќ. Се претпоставува нуклеорен грегоријанскиот календар со 0 година пред 1 година и 1 година претходната година 0. Времето се претпоставува дека е во локалната временска зона. Ако знамето за заштедување на лет е позитивно, се смета дека времето е летно сметање; ако е нула, се претпоставува дека времето е стандардно; и ако е негативно (стандардно), mktime () се обидува да утврди дали летното сметање е во сила за одредено време. Ако терминот datepec не содржи доволно елементи или ако даденото време е надвор од опсегот, 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 )

Врати го битното И на вредностите обезбедени од v1 и v2 .

compl ( val )

Врати го битниот комплемент на вал .

lshift ( val , count )

Врати ја вредноста на вал , префрлена лево од брои битови.

или ( v1 , v2 )

Врати го битното ИЛИ на вредностите обезбедени од v1 и v2 .

rshift ( вал , брои )

Врати ја вредноста на вал , префрлена десно од броја .

xor ( v1 , v2 )

Врати го бинарно 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 се дефинирани како што следува:

име на функција ( листа со параметри ) { извештаи }

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

Бидејќи функциите првично не беа дел од AWK јазикот, одредбите за локални променливи се прилично несмасни: тие се декларираат како екстра параметри во листата со параметри. Конвенцијата е да се одделат локалните варијабли од вистински параметри со дополнителни простори во листата на параметри. На пример:

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

Левата заграда во повик на функцијата е потребно веднаш да го следи името на функцијата, без никаков интервентен бел простор. Ова е за да се избегне синтаксичка двосмисленост со операторот за конкатенација. Ова ограничување не се однесува на вградените функции наведени погоре.

Функциите можат да се повикуваат еден на друг и може да бидат рекурзивни. Параметрите на функциите кои се користат како локални променливи се иницијализираат на нула низа и бројот нула при повикувањето на функцијата.

Користете врати expr за да вратите вредност од функција. Вредноста на враќање е недефинирана ако не е обезбедена вредност или ако функцијата се враќа со "паѓање" на крајот.

Ако е овозможено - lint , gawk предупредува за повици до недефинирани функции во време на разгледување, наместо во времето на извршување. Повикувањето на недефинирана функција при стартување е фатална грешка.

Зборот func може да се користи на местото на функцијата .

ДИНАМИЧНО НАПОЛНУВАЊЕ НА НОВИ ФУНКЦИИ

Почнувајќи од верзијата 3.1 на gawk , можете динамички да додавате нови вградени функции на преведувачот кој работи трчање. Целосните детали се надвор од опсегот на ова упатство страница; види GAWK: Ефикасно AWK програмирање за деталите.

продолжување ( објект , функција )

Динамично ја поврзува датотеката со заеднички објект именувана според објектот и повикува функција во тој објект, за да изврши иницијализација. Овие треба да бидат обезбедени како стрингови. Ја враќа вредноста вратена со функцијата .

Оваа функција е обезбедена и документирана во GAWK: Ефикасно AWK програмирање , но сè за оваа функција најверојатно ќе се промени во следното издание. Ние STRONGLY препорачуваме да не ја користите оваа функција за нешто што не сакате да го повторите.

СИГНАЛИ

pgawk прифаќа два сигнала. SIGUSR1 го предизвикува да го исфрли профилот и функцијата оџак за повик до датотеката со профили, што е или awkprof.out , или која датотека е именувана со опцијата --profile . Потоа продолжува да работи. SIGHUP предизвикува да го исфрли профилот и стек на повик, а потоа да излезе.

ПРИМЕРИ

Печатете ги и сортирајте ги имињата за најава на сите корисници: BEGIN {FS = ":"} {print $ 1 | "sort"} Број линии во датотека: {nlines ++} END {print nlines} Секоја линија се претвора по бројот во датотеката: {print FNR, $ 0} Конкатен број и број на линија (варијација на тема): {print NR, $ 0}

Интернализација

Константи на низа се секвенци на карактери оградени во двојни цитати. Во средини што не го зборуваат англискиот, можно е да се обележат стрингови во програмата AWK како што бара превод на мајчин природен јазик. Таквите низи се обележани во програмата AWK со водечка подвлека (`` _ ''). На пример,

gawk 'BEGIN {отпечати "здраво, свет"} "

секогаш отпечатоци здраво, свет . Но,

gawk 'BEGIN {print _ "здраво, свет"} "

може да отпечати бонѓај, монде во Франција.

Постојат неколку чекори кои се вклучени во производство и водење на локализирана 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 .

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

Посикс компатибилност

Примарната цел за gawk е компатибилноста со POSIX стандардот, како и со најновата верзија на UNIX awk . За таа цел, gawk ги вклучува следните кориснички видливи функции кои не се опишани во AWK книгата, но се дел од верзијата на awk на Bell Laboratories и се во POSIX-стандардот.

Книгата покажува дека доделувањето на варијаблата на командната линија се случува кога awk инаку ќе го отвори аргументот како датотека, што е по извршувањето на блокот BEGIN . Меѓутоа, во претходните имплементации, кога таквата задача се појави пред какви било имиња на датотеки, задачата ќе се случи пред да се изврши блокот BEGIN . Апликациите дошле да зависат од оваа `` функција. '' Кога awk беше променет за да одговара на неговата документација, опцијата -v за доделување променливи пред извршување на програмата беше додадена за да се приспособат апликации што зависат од старото однесување. (Оваа функција беше договорена од лабораториите Бел и развивачите на ГНУ.)

Опцијата -W за специфични функции за имплементација е од POSIX стандардот.

Кога обработува аргументи, gawk користи специјална опција `` - '' за да го сигнализира крајот на аргументите. Во режим на компатибилност, тој предупредува, но на друг начин ги игнорира недефинираните опции. Во нормална работа, таквите аргументи се пренесуваат на програмата AWK за да се процесираат.

Книгата AWK не ја дефинира вратената вредност на srand () . Стандардот POSIX го враќа семето што го користеше, за да овозможи следење на секвенците на случаен број. Затоа srand () во gawk, исто така, го враќа своето сегашно семе.

Други нови функции се: Употреба на повеќе опции -f (од MKS awk ); низата ENVIRON ; \ a , и \ v бегство секвенци (направено првично во gawk и се хранат назад во Bell Laboratories верзија); функциите tolower () и toupper () вградени во функцијата (од верзијата Bell Laboratories); и ANSI C конверзија спецификации во printf (направено прво во Bell Laboratories верзија).

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

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

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

е ист како и секој од

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

Оваа функција е обележана како "застарена" во POSIX стандардот, и gawk издава предупредување за неговата употреба, ако - е наведен во командната линија.

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

Екстензии на GNU

Gawk има голем број на екстензии на POSIX awk . Тие се опишани во овој дел. Сите екстензии опишани овде може да бидат оневозможени со повикување на gawk со --традиционалната опција.

Следниве карактеристики на gawk не се достапни во POSIX awk .

*

Не се извршува пребарување на патеки за датотеки именувани преку опцијата -f . Затоа променливата на животната средина AWKPATH не е посебна.

*

\ X избега секвенца. (Оневозможено со --поставка .)

*

Функцијата fflush () . (Оневозможено со --поставка .)

*

Способноста да се продолжи со линиите по ? и :. (Оневозможено со --поставка .)

*

Октални и хексадецимални константи во AWK програмите.

*

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

*

Променливата IGNORECASE и нејзините несакани ефекти не се достапни.

*

FIELDWIDTHS променлива и фиксна ширина поле разделување.

*

Прозорецот PROCINFO не е достапен.

*

Употребата на РС како регуларен израз.

*

Специјалните имиња на датотеки кои се достапни за пренасочување на I / O не се препознаваат.

*

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

*

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

*

Опционалниот втор аргумент за функцијата за затворање () .

*

Опционалниот трет аргумент на функцијата match () .

*

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

*

Употребата на избришете низа за да ја избришете целата содржина на низата.

*

Употребата на следната датотека за да се откаже од обработката на тековната влезна датотека.

*

И () , asort () , bindtextdomain () , compl () , dcgettext () , gensub () , lshift () , mktime () или () , rshift () , strftime () , strtonum () , systime () и xor () функции.

*

Локализирани жици.

*

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

Книгата AWK не ја дефинира повратната вредност на функцијата close () . Затворањето на Gawk () ја враќа вредноста од fclose (3), или pclose (3), при затворање на излезната датотека или цевка, соодветно. Го враќа статусот за излез од процесот кога затвора влезна цевка. Вредноста на враќање е -1 ако именуваната датотека, цевка или ко-процес не се отвори со пренасочување.

Кога gawk се повикува со --традиционалната опција, ако аргументот fs на опцијата -F е `` t '', тогаш FS е поставен на табулаторот. Имајте на ум дека пишувањето gawk -F \ t ... едноставно предизвикува школка да го цитира "t", и не поминува "t \" во опцијата -F . Бидејќи ова е прилично грда посебен случај, тоа не е стандардно однесување. Ова однесување исто така не се појавува ако е назначено --posix . За да се добие табуларен карактер како поле сепаратор, најдобро е да користите единечни цитати: gawk -F '\ t' ....

Види други команди : wait , lp , complete , execv , getfacl , ioctl , uniq , rmmod , pvcreate , rsh , unix2dos , cal , fs , cd , iwpriv , во , кој , iwconfig , ifconfig , vgdisplay , отворен , lsmod , ntohs , mailq , убиј , wtmp