Сазнајте Линук Цомманд - гавк

Име

гавк - језик скенирања узорака и обраде

Синопсис

гавк [ПОСИКС или ГНУ стиле оптионс] програмска датотека [ - ] датотека ...
гавк [ПОСИКС или ГНУ стиле оптионс] [ - ] програмска текстуална датотека ...

пгавк [ПОСИКС или ГНУ стиле оптионс] програм-фајла [ - ] датотека ...
пгавк [ПОСИКС или ГНУ стиле оптионс] [ - ] програмска-текстуална датотека ...

Опис

Гавк је имплементација ГНУ пројекта на програмском језику АВК-а. У складу је са дефиницијом језика у ПОСИКС 1003.2 командном језику и услужним стандардима. Ова верзија, заузврат, заснива се на опису у АВК Програмском језику , од стране Ахо, Кернигхан и Веинбергер, са додатним карактеристикама које се налазе у верзији система ВИКС 4 УНИКС авк . Гавк такође нуди и најновије Белл Лабораториес авк ектенсионс , као и неколико ГНУ специфичних екстензија.

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

Командна линија се састоји од опција само за гавк, АВК програмског текста (ако се не испоручује преко опција или --филе ) и вриједности које ће бити доступне у АРГЦ и АРГВ унапред дефинисаним АВК варијаблама.

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

Гавк опције могу бити или традиционалне ПОСИКС опције једног слова или дугачке опције ГНУ-а. Опције ПОСИКС почињу са једним `` - '', док дугачке опције почињу са `` - ''. Дугачке опције су дате за ГНУ-специфичне функције и за ПОСИКС-оване функције.

Следећи ПОСИКС стандард, гавк -специфичне опције се испоручују путем аргумената на опцију . Могуће је испоручити више опција -В. Свака опција има одговарајућу дугачку опцију, како је детаљније наведено у наставку. Аргументи за дугачке опције се или придружују опцији знаком = без икаквих интерних размака, или се могу дати у сљедећем аргументу командне линије. Дугачке опције могу бити скраћене, све док скраћеница остане јединствена.

Опције

Гавк прихвата следеће опције, наведене у абецеди.

фс

--фиелд-сепаратор фс Користите фс за сепаратор поља за унос (вриједност ФС предефинисане варијабле).

вар = вал

--ассигн вар = вал Доделите вриједност вал у варијаблу вар прије почетка извршавања програма. Такве варијабилне вриједности су доступне БЕГИН блоку АВК програма.

програмска датотека

--филе програм-датотека Прочитајте изворни програм АВК-а из датотеке датотеке -датотека , уместо из првог аргумента командне линије. Може се користити више (или -филе ) опција.

-мф ННН

-мр ННН Подеси разне границе меморије на вредност ННН . Ф застава поставља максималан број поља, а ознака р поставља максималну величину записа. Ове две заставе и опција су из истраживачке верзије Белл Лабораториес УНИКС авк . Они игноришу гавк , с обзиром да гавк нема предефинисане границе.

-В цомпат

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

- компатибилно

--традитионал Покрени у режиму компатибилности . У режиму компатибилности, гавк се понаша идентично са УНИКС авк ; ниједан од ГНУ-специфичних екстензија није препознат. Коришћење --традитионал-а је пожељније у односу на друге облике ове опције. Погледајте ГНУ ЕКСТЕНСИОНС , доле, за више информација.

-В цопилефт

-В цопиригхт

--цопилефт

--цопиригхт Штампајте кратку верзију ГНУ поруке о ауторским правима на стандардном излазу и изађите успешно.

-В думп-вариаблес [ = датотека ]

--думп-вариаблес [ = филе ] Штампа сортирану листу глобалних променљивих, њихових типова и крајњих вредности у датотеку . Ако не постоји датотека , гавк користи датотеку под именом авкварс.оут у тренутном директоријуму.

Имати листу свих глобалних варијабли је добар начин за тражење типографских грешака у вашим програмима. Такође бисте користили ову опцију ако имате велики програм са пуно функција и желите бити сигурни да ваше функције не ненамерно користе глобалне варијабле које сте мислили да буду локални. (Ово је нарочито лака грешка коју треба направити са једноставним променљивим именима као што су и , ј и тако даље.)

- Помозите

-В употреба

--помоћ

--усаге Штампајте релативно кратак преглед доступних опција на стандардном излазу. (По стандардима ГНУ кодирања ове опције узрокују непосредан и успешан излаз.)

-В линт [ = погубно ]

--линт [ = фатал ] Обезбедите упозорења о конструктима који су сумњиви или непреносиви за друге имплементације АВК. Са опционим аргументом фаталне , упозорења о ланцу постају фаталне грешке. Ово може бити драстично, али његова употреба ће свакако подстаћи развој чистијих АВК програма.

-Слијепо стари

-линт-олд Провиде варнингс абоут цонструцтс тхат аре нот портабле то оригинал версион оф Уник авк .

-В ген-по

--ген-по Скенирајте и разврстајте АВК програм и генеришите датотеку ГНУ .по формату на стандардном излазу са ставкама за све локализоване низове у програму. Сам програм се не извршава. Погледајте ГНУ дистрибуцију геттова за више информација о .по датотекама.

-В не-децимални подаци

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

-В посик

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

*

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

*

Само простор и таб делују као сепаратори поља када је ФС подешен на један простор, нова линија не.

*

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

*

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

*

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

*

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

-В профил [ = проф_филе ]

--профиле [ = проф_филе ] Пошаљите профилисање података проф_филе . Подразумевано је авкпроф.оут . Када се покреће са гавк , профил је само "лепа штампана" верзија програма. Када се покрене са пгавк-ом , профил садржи број извршења сваке изјаве у програму у левој маргини и бројеви позива функција за сваку кориснички дефинирану функцију.

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

--ре-интервал Омогућите употребу израза интервала у усклађивању регуларног израза (погледајте Регулар Екпрессионс , доле). Изрази интервала нису традиционално доступни на језику АВК-а. Стандард ПОСИКС их је додао, како би направио авк и егреп у складу једни с другима. Међутим, њихова употреба ће највероватније прекинути стара АВК програме, тако да их гавк пружи само ако су затражени са овом опцијом, или када је наведен --посик .

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

--соурце програм-текст Користите програмски текст као изворни код АВК програма. Ова опција омогућава једноставно премештање функција библиотеке (користи се помоћу опција и --филе ) са изворним кодом унетим у командну линију. Намењен је првенствено за средње и велике АВК програме који се користе у схелл скриптама.

-В верзија

--версион Информације о верзији за ову копију гавка на стандардном излазу. Ово је корисно углавном за сазнање да ли је тренутна копија гавк-а на вашем систему ажурна у односу на оно што дистрибуира Фрее Софтваре Фоундатион. Ово је такође корисно приликом пријављивања грешака. (По стандардима ГНУ кодирања ове опције узрокују непосредан и успешан излаз.)

- Сигнал крај опција. Ово је корисно да дозволите даље аргументе за сам програм АВК да започне са `` - ''. Ово је углавном за доследност са концептом раздвајања аргумента који користи већина других ПОСИКС програма.

У режиму компатибилности, све друге опције су означене као неважеће, али се на други начин игноришу. У нормалном раду, све док се програмски текст испоручује, непознате опције се преносе на АВК програм у АРГВ низу за обраду. Ово је посебно корисно за покретање АВК програма помоћу механизма "#!" Извршног преводиоца.

ИЗВОЂЕЊЕ АВК ПРОГРАМА

Програм АВК се састоји од секвенце изјава о узорку и опционалним дефиницијама функција.

образац { акције изјаве }

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

Гавк најпре чита програмски извор из програмских фајлова ако је специфицирано, од аргумената до --соурце или из првог не-опције аргумента у командној линији. Опције и --соурце се могу користити више пута на командној линији. Гавк чита програмски текст као да су сви изворни текстови програмских датотека и изворних текстова командне линије били повезани заједно. Ово је корисно за изградњу библиотека функција АВК, без потребе да их укључите у сваки нови АВК програм који их користи. Такође пружа могућност мешања функција библиотеке са програмима командне линије.

Варијабла околине АВКПАТХ одређује путању за претраживање која се користи приликом проналажења изворних датотека именом са опцијом . Ако ова варијабла не постоји, подразумевана стаза је ".: / Уср / лоцал / схаре / авк" . (Стварни директоријум може да варира, у зависности од тога како је гавк направљен и инсталиран.) Ако име датотеке дату опцији садржи знак "` / ", не врши се претрага путање.

Гавк извршава АВК програме у следећем редоследу. Прво су извршене све варијабилне задатке специфициране преко опције . Затим, гавк компајлира програм у интерну форму. Затим, гавк извршава код у БЕГИН блоковима (ако их има), а затим наставља читање сваке датотеке назване у АРГВ низу. Ако у командној линији нема фајлова названих, гавк чита стандардни унос.

Ако име фајла у командној линији има облик вар = вал , третира се као варијабла. Варијабле вар ће бити додељено вредност вал . (Ово се дешава након што су покренути било који блокови БЕГИН- а.) Додјела варијабли командне линије је најкориснија за динамичку додјелу вриједности варијаблама које АВК користи за контролу начина на који је унос подијељен у поља и записе. Такође је корисно за контролу стања ако је потребно више прелаза преко једне датотеке података.

Ако је вредност одређеног елемента АРГВ празна ( "" ), гавк прескочи преко ње.

За сваки запис у улазу, гавк тестира да ли се уклопи у било који образац у АВК програму. За сваки образац који се записи подудара, придружена акција се извршава. Обрасци се тестирају по редоследу који се појављују у програму.

Коначно, након што се сви уноси истрошени, гавк извршава код у ЕНД блоковима (ако их има).

Варијабле, записи и поља

АВК променљиве су динамичне; они настају када се први пут користе. Њихове вриједности су бројеви или низови са плутајућим тачкама, или обоје, у зависности од тога како се користе. АВК такође има једнодимензионалне низове; Низови са вишеструким димензијама могу се симулирати. Неколико унапријед дефинисаних променљивих постављено је као програмски рад; ови ће бити описани као потребни и сажети у наставку.

Записи

Обично се записи раздвајају новим знаковима. Можете контролисати како се подаци раздвајају додељивањем вриједности уграђени варијабли РС . Ако је РС сваки појединачни знак, тај лик раздваја записнике. Иначе, РС је регуларни израз. Текст на улазу који одговара овом регуларном изразу раздваја запис. Међутим, у режиму компатибилности, користи се само први карактер његове стринг вредности за раздвајање записа. Ако је РС постављен на нулл стринг, онда су записи раздвојени празним линијама. Када је РС постављен на нулл стринг, знак нове линије увек делује као сепаратор поља, поред сваке вредности коју ФС може имати.

Поља

Како је сваки унос записа прочитан, гавк раздваја запис у поља , користећи вриједност ФС варијабле као сепаратор поља. Ако је ФС један знак, поља су одвојена том знаком. Ако је ФС нула нула, онда сваки појединачни знак постаје одвојено поље. Иначе, ФС се очекује да буде пуно регуларно изражавање. У посебном случају када је ФС јединствени простор, поља су раздвојена простиркама и / или табовима и / или новим линијама. (Али погледајте расправу о --посик , испод). НАПОМЕНА: вредност ИГНОРЕЦАСЕ (види доле) такође утиче на то како су поља подијељена када је ФС регуларни израз и како се подаци одвајају када је РС регуларан израз.

Ако је варијабла ФИЕЛДВИДТХС постављена на листу са бројевима одвојеним од размака, очекује се да ће свако поље имати фиксну ширину, а гавк ће поделити запис помоћу одређених ширина. Вредност ФС је игнорисана. Додјељивање нове вриједности ФС-у преписује кориштење ФИЕЛДВИДТХС- а и враћа подразумевано понашање.

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

н = 5
принт $ н

штампа пето поље у улазном запису.

Променљива НФ је подешена на укупан број поља у улазном запису.

Позиви на непостојећа поља (нпр. Поља након $ НФ ) производе нулту везу. Међутим, додељивање непостојеће поље (нпр. $ (НФ + 2) = 5 ) повећава вриједност НФ-а , ствара сва интервенцијска поља са нулл стрингом као њихову вриједност, и узрокује поновно израчунавање вриједности $ 0 , с поља су одвојена вриједношћу ОФС-а . Позивање на негативна нумерисана поља узрокује фаталну грешку. Умањење НФ доводи до губитка вредности поља изнад нове вриједности и вриједности $ 0 за поновно израчунавање, а поља су одвојена вриједношћу ОФС-а .

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

Уграђене варијабле

Гавкове уграђене варијабле су:

АРГЦ

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

АРГИНД

Индекс у АРГВ тренутне датотеке која се обрађује.

АРГВ

Арраи аргумената командне линије. Низ је индексиран од 0 до АРГЦ - 1. Динамичко мијењање садржаја АРГВ-а може контролирати датотеке које се користе за податке.

БИНМОДЕ

На системима без ПОСИКС-а, специфицира се употреба `` бинарног '' режима за све датотеке И / О. Нумеричке вредности од 1, 2 или 3 наводе да би улазне датотеке, излазне датотеке или све датотеке требале користити бинарни И / О. Вредности стринга "р" или "в" наводе да улазне датотеке или излазне датотеке треба да користе бинарни И / О. Вредности стринга "рв" или "вр" наводе да би све датотеке требале користити бинарни И / О. Свака друга вриједност стринга се третира као "рв" , али генерира поруку упозорења.

ЦОНВФМТ

Формат претворбе за бројеве, "% .6г" , подразумевано.

ЕНВИРОН

Низ који садржи вредности тренутног окружења. Низ је индексиран променљивим окружењем, сваки елемент је вриједност те варијабле (нпр., ЕНВИРОН ["ХОМЕ"] може бити / хоме / арнолд ). Промена овог поља не утиче на окружење које се види од програма који гавк спавнс путем преусмеравања или система () функције.

ЕРРНО

Ако дође до системске грешке или врши преусмеравање за гетлине , током читања за гетлине или током затварања () , ЕРРНО ће садржати низ који описује грешку. Вредност је предмет превода у не-енглеском језику.

ФИЕЛДВИДТХС

Листа одвојених поља у бијелом простору. Када је подешен, гавк анализира улаз у поља фиксне ширине, уместо да користи вриједност ФС варијабле као сепаратор поља.

НАЗИВ ДОКУМЕНТА

Назив тренутне улазне датотеке. Ако на командној линији нису наведене датотеке, вредност ФИЛЕНАМЕ је `` - ''. Међутим, ФИЛЕНАМЕ је недефинисан унутар БЕГИН блока (осим ако није постављен помоћу гетлине ).

ФНР

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

ФС

Поље за унос поља, подразумевани простор. Видите поља , горе.

ИГНОРЕЦАСЕ

Контролише осетљивост случаја свих регуларних израза и низова операција. Ако ИГНОРЕЦАСЕ има нулту вриједност, онда упоређивање низова и усклађивање узорака у правилима, раздвајање поља с ФС-ом , записивање раздвајања са РС , регуларни израз који се подудара са ~ и ! ~ , И генсуб () , гсуб () , индек () , матцх () , сплит () и суб () уграђене функције све игноришу случај када раде регуларне изразе. НАПОМЕНА: Ундерсписивање матрице не утиче, нити је асорт () функција.

Дакле, ако ИГНОРЕЦАСЕ није једнак нули, / аБ / одговара свим низовима "аб" , "аБ" , "Аб" и "АБ" . Као и код свих АВК варијабли, почетна вриједност ИГНОРЕЦАСЕ је нула, тако да су сви регуларни изрази и низови операције обично осјетљиви на величину слова. Под Уником, пуни ИСО 8859-1 Латин-1 скуп знакова се користи када игноришете случај.

ЛИНТ

Пружа динамичку контролу опције --линт из програма АВК. Када је истинито, гавк штампа упозорења на ланцу. Када је нетачно, то не значи. Када се вриједност стринга додели "фаталном" , упозорења о ланцу постају фаталне грешке, управо као --линт = фатална . Свака друга вриједна вриједност само штампа упозорења.

НФ

Број поља у тренутном улазном запису.

НР

Укупан број досадашњих улазних података.

ОФМТ

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

ОФС

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

ОРС

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

ПРОЦИНФО

Елементи овог поља пружају приступ информацијама о покретном АВК програму. На неким системима могу бити елементи у низу, "група1" кроз "групу н " за некакав н , што је број допунских група које процес има. Користите у оператеру да тестирате за ове елементе. Следећи елементи су гарантовани да буду доступни:

ПРОЦИНФО ["егид"]

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

ПРОЦИНФО ["еуид"]

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

ПРОЦИНФО ["ФС"]

"ФС" ако је дјељење поља са ФС на снази, или "ФИЕЛДВИДТХС" ако је дјељење поља са ФИЕЛДВИДТХС на снази.

ПРОЦИНФО ["гид"]

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

ПРОЦИНФО ["пгрпид"]

ИД групе процеса тренутног процеса.

ПРОЦИНФО ["пид"]

ИД процеса текућег процеса.

ПРОЦИНФО ["ппид"]

ИД родитељског процеса текућег процеса.

ПРОЦИНФО ["уид"]

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

РС

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

РТ

Терминатор записа. Гавк поставља РТ на улазни текст који одговара карактеру или редовном изразу који је одредио РС .

РСТАРТ

Индекс првог карактера упарен са подударањем () ; 0 ако нема меча. (То значи да индикатори карактера почињу у једном.)

РЛЕНГТХ

Дужина стринга која одговара матрици () ; -1 ако нема меча.

СУБСЕП

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

ТЕКСТДОМАИН

Текстуални домен АВК програма; користи се за проналажење локализованих превода за низова програма.

Арраи

Низови су индексирани изразима између квадратних заграда ( [ и ] ). Ако је израз израз листе израза ( екпр , екпр ...) онда је индексни низ матрице низ који се састоји од конценатације (стринг) вриједности сваког израза, одвојеног вриједношћу СУБСЕП варијабле. Овај објекат се користи за симулацију вишеструко димензионираних низова. На пример:

и = "А"; ј = "Б"; к = "Ц"
к [и, ј, к] = "здраво, свет \ н"

додељује низ "здраво, свет \ н" елементу низа к који је индексиран низом "А \ 034Б \ 034Ц" . Сви низови у АВК-у су асоциативни, тј. Индексирани по вриједностима стринга.

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

ако (вал у низу) штампани низ [вал]

Ако низ има више индекса, користите (и, ј) у низу .

У конструкту се такође може користити у петљи за поновну процену свих елемената низа.

Елемент се може избрисати из поља помоћу израза за брисање . Изјава о брисању се такође може користити за брисање читавог садржаја низа, једноставно навођењем имена низа без индекса.

Варијабилно писање и конверзија

Варијабле и поља могу бити бројеви (плутајуће тачке) или низови или обоје. Како се вриједност варијабле тумачи зависи од његовог контекста. Ако се користи у нумеричком изразу, биће третирана као број, ако се користи као низ који ће се третирати као низ.

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

Када се стринг мора претворити у број, конверзија се остварује користећи стртод (3). Број се претвара у низ користећи вредност ЦОНВФМТ као формат за спринтф (3), са нумеричком вриједношћу варијабле као аргументом. Међутим, иако су сви бројеви у АВК-у плутајуће тачке, интегралне вриједности се увијек конвертују као цијели бројеви. Тако, дата

ЦОНВФМТ = "% 2.2ф" а = 12 б = а ""

променљива б има стринг вредност "12" а не "12.00" .

Гавк врши упоређивања на следећи начин: Ако су две варијабле нумеричке, оне се упоређују нумерички. Ако је једна вриједност нумеричка, а друга има вриједност стринга која је "нумерички низ", онда се поредјења врше нумерички. У супротном, нумеричка вредност се претвара у низ и врши се упоређивање стрингова. Две струне се, наравно, упоређују као жице. Имајте на уму да ПОСИКС стандард примјењује концепт "нумеричког стринга" свугде, чак и константе стрингова. Међутим, ово је очито нетачно, а гавк то не ради. (Срећом, ово је исправно у следећој верзији стандарда.)

Имајте на уму да стринг константе, као што је "57" , нису нумерички стрингови, они су стринг константе. Идеја о `` нумеричком низу '' односи се само на поља, улазне линије , ФИЛЕНАМЕ , АРГВ елементе, ЕНВИРОН елементе и елементе поља креираног од сплита () који су нумерички стрингови. Основна идеја је да се корисник третира и само корисничко унос који изгледа нумерички, треба третирати на тај начин.

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

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

Почевши од верзије 3.1 гавк-а, можете користити изворне шифре програма АВК у Ц-стилу каталошке и хексадецималне константе. На пример, октална вредност 011 је једнака децималном 9 , а хексадецимална вредност 0к11 је једнака децималним вредностима од 17.

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

Константе стринга у АВК су секвенце знакова затворених између двоструких цитата ( " ). У оквиру низова су препознате одређене есцапе секвенце , као у Ц. То су:

\\

Добра бацксласх.

\ а

Знак "упозорења"; обично АСЦИИ БЕЛ знак.

\ б

бацкспаце.

\ ф

облик хране.

\ н

Нова линија.

\ р

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

\ т

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

\ в

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

\ к хекс цифре

Карактер представљен низом хексадецималних цифара који следи \ к . Као иу АНСИЦ-у, све следеце хексадецималне цифре сматрају се једним редом избегавања. (Ова карактеристика би требало да нам каже нешто о дизајну језика од стране одбора.) На примјер , "\ к1Б" је АСЦИИЕСЦ (есцапе) карактер.

\ ддд

Карактер представљају 1-, 2- или 3-цифрени секвенцу окталних цифара. На примјер, "\ 033" је АСЦИИ ЕСЦ (есцапе) знак.

\ ц

Буквални карактер ц .

Есцапе секвенце се такође могу користити унутар константних регуларних израза (нпр., / [\ Т \ ф \ н \ р \ в] / одговара празним карактерима).

У режиму компатибилности, карактери представљени окталним и хексадецималним есцапе секвенцама се третирају буквално када се користе у константама регуларног израза. Дакле, / а \ 52б / је еквивалентан / а \ * б / .

Паттернс анд Ацтионс

АВК је лине-оријентисан језик. Први је модел, а затим акција. Изјаве о акцији су приложене у { и } . Или образац можда недостаје, или акција можда недостаје, али, наравно, не обоје. Ако образац недостаје, акција се извршава за сваки појединачни унос података. Недостатак акције је еквивалентан

{принт}

који штампа цео запис.

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

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

Паттернс

АВК обрасци могу бити један од следећих:

БЕГИН ЕНД / обичан израз / шаблон релационог израза & шаблон образца || образац узорка ? шаблон : шаблон ( шаблон ) ! паттерн1 , паттерн2

БЕГИН и ЕНД су две посебне врсте образаца који нису тестирани на улазу. Акциони делови свих БЕГИН обрасца се спајају као да су све изјаве написане у једном БЕГИН блоку. Они се извршавају пре чита читавог уноса. Слично томе, сви ЕНД блокови се спајају и извршавају када се исцрпи сви уноси (или када се изврши изјава о излазу ). БЕГИН и ЕНД обрасци се не могу комбиновати са другим обрасцима у изразима у облику. БЕГИН и ЕНД шаблони не могу имати недостајућих дјелова дјеловања.

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

Релацијски израз може користити било који од оператора дефинисаних доле у ​​одељку о акцијама. Ове генерално тестирају да ли одређена поља одговарају одређеним регуларним изразима.

Тхе && , || , и ! оператери су логични И, логички ОР и логички НОТ, респективно, као у Ц. Они врше процену кратког споја, такође као у Ц, и користе се за комбиновање израза примитивнијег образца. Као иу већини језика, заграде се могу користити за промену редоследа евалуације.

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

Образац1 , образац2 облика израза назива се распон распона . Она се подудара са свим улазним подацима почевши са записом који одговара паттерн1 , и наставља се све до записа који одговара образцу2 , укључујући. Не комбинира се са неком другом врстом израза.

Регуларни изрази

Редовни изрази су проширени тип пронашли у егреп . Оне се састоје од карактера на следећи начин:

ц

одговара не-метакарактер ц .

\ ц

одговара буквалном карактеру ц .

.

одговара свим карактерима укључујући и нову линију.

^

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

$

одговара крају стринга.

[ абц ... ]

листа знакова, одговара било којем од знакова абц ....

[^ абц ... ]

негирана листа карактера, одговара било којој особи осим абц ....

р1 | р2

алтернатива: одговара р1 или р2 .

р1р2

конценатација: одговара р1 , а затим р2 .

р +

одговара један или више р .

р *

одговара нули или више р .

р ?

одговара нули или једној р .

( р )

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

р { н }

р { н ,}

р { н , м } Један или два бројева унутар заграда означавају интервални израз . Ако постоји један број у грудима, претходни регуларни израз р се понавља н пута. Ако су два броја одвојена зарезом, р се понавља н до м пута. Ако постоји један број, а затим запета, р се понавља најмање н пута.

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

\ и

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

\ Б

одговара празном низу унутар речи.

\ <

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

\>

одговара празном низу на крају речи.

\ в

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

\ В

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

\ `

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

\ '

одговара празном низу на крају бафера.

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

Класе знакова представљају нову функцију уведену у ПОСИКС стандард. Класа знакова је посебна ознака за описивање листа карактера који имају одређени атрибут, али тамо где се стварни карактери могу разликовати од земље до земље и / или од карактера постављеног на скуп знакова. На примјер, појам о томе шта је алфабетски карактер разликује се у САД-у и Француској.

Класа карактера важи само у регуларном изразу у заградама листе знакова. Класе карактера се састоје од [: , кључне ријечи које означавају класу, и :] . Класе знакова дефинисане ПОСИКС стандардом су:

[: алнум:]

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

[: алпха:]

Абецедни знакови.

[: празно:]

Простор или таблице.

[: цнтрл:]

Контролни знакови.

[:цифра:]

Нумерички знакови.

[: граф:]

Знакови који се могу штампати и видљиви. (Простор се може штампати, али није видљив, док је а оба.)

[: ниже:]

Абецедни знаци нижих слова.

[: принт:]

Штампани знаци (знакови који нису контролни знакови.)

[: пунцт:]

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

[: спаце:]

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

[: горњи:]

Абецедни знакови великих слова.

[: кдигит:]

Ликови који су хексадецимални цифри.

На примјер, прије ПОСИКС стандарда, за усклађивање алфанумеричких знакова, морали бисте да напишете / [А-За-з0-9] / . Ако је у вашем скупу карактера било других алфабетских знакова, то се не би подударало са њима, а ако се ваш скуп карактера разликује од АСЦИИ-а, то можда чак и не одговара алфанумеричким знацима АСЦИИ-а. Са ПОСИКС класа знакова, можете написати / [[: алнум:]] / , а ово се подудара с абецедним и нумеричким знаковима у вашем скупу знакова.

Две додатне специјалне секвенце могу се појавити у листама знакова. Ове се односе на скупове знакова који нису АСЦИИ, који могу имати појединачне симболе (назване елементи за сакупљање ) који су представљени са више од једног карактера, као и неколико знакова који су еквивалентни за сакупљање или сортирање. (На пример, на француском, обичан "е" и гроб нагласак су једнаки.)

Цоллатинг Симболс

Симбол за упоређивање је вишемаркан елемент који се налази у [[. и .] . На примјер, ако је цх елемент за сређивање, онда је [[.цх.]] Регуларни израз који се подудара с тим елементом за сравнавање, док је [цх] регуларни израз који се подудара с ц или х .

Класе еквиваленције

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

Ове карактеристике су веома корисне у не-енглеским говорним местима. Функције библиотеке које гавк користи за усклађивање регуларног израза тренутно препознају само класе ПОСИКС класа; они не препознају симболе сакупљања или класе еквиваленције.

Оператори \ и , \ Б , \ < , \> , \ в , \ В , \ ` и \ ' су специфични за гавк ; они су екстензије засноване на објектима у ГНУ регуларним експресионим библиотекама.

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

Нема опција

У дефаултном случају, гавк пружа све могућности ПОСИКС регуларних израза и оператера регуларног израза ГНУ описаних горе. Међутим, изрази интервала нису подржани.

--посик

Подржани су само ПОСИКС регуларни изрази, ГНУ оператери нису посебни. (Ег, \ в одговара литералном в ). Интервални изрази су дозвољени.

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

Традиционални Уник авк регуларни изрази су упарени. Оператори ГНУ-а нису посебни, интервални изрази нису доступни, нити су ПОСИКС-ове класе знакова ( [[: алнум:]] и тако даље). Знакови описани окталним и хексадецималним есцапе секвенцама се третирају буквално, чак и ако представљају мета-карактере регуларног израза.

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

Дозволи интервалне изразе у регуларним изразима, чак и ако је предвиђено - традиционално .

Акције

Изјаве о акцији су у оградама, { и } . Изјаве о акцији се састоје од уобичајених задатака додељивања, условних и петље које се налазе на већини језика. Оператори, управљачки изрази и доступни изводи / излази су узорци након оних у Ц.

Оператори

Оператори у АВК-у су, према редоследу смањења првенства,

( ... )

Груписање

$

Фиелд референце.

++ -

Повећање и смањење, и префикс и постфикс.

^

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

+ -!

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

* /%

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

+ -

Сабирање и одузимање.

простор

Конкретен низ.

<>

<=> =

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

~! ~

Регулисање међусобног израза, негирани меч. НАПОМЕНА: Не користите константан регуларни израз ( / фоо / ) на левој страни ~ или ! ~ . Користите само једну са десне стране. Израз / фоо / ~ екп има исто значење као (($ 0 ~ / фоо /) ~ екп ) . Ово обично није оно што је било намеравано.

ин

Чланство у Арраиу.

&&

Логично и.

||

Логички ОР.

?:

Ц условни израз. Ово има облик екпр1 ? екпр2 : екпр3 . Ако је екпр1 тачан, вредност израза је екпр2 , иначе је екпр3 . Процењује се само један од екср2 и екпр3 .

= + = - =

* = / =% = ^ = Задавање. Подржани су и апсолутни задатак ( вар = вриједност ) и додјељивање оператора (други облици).

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

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

иф ( цондитион ) статемент [ елсе статемент ] вхиле ( цондитион ) статемент до статемент вхиле ( цондитион ) фор ( екпр1 ; екпр2 ; екпр3 ) статемент фор ( вар ин арраи ) статемент бреак цонтинуе делете арраи [ индек ] делете арраи екит [ екпрессион ] { изјаве }

Изјаве И / О

Изводи улазне / излазне су следећи:

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

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

гетлине

Подеси $ 0 од следећег улазног записа; поставите НФ , НР , ФНР .

гетлине < фајл

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

гетлине вар

Поставите вар од следећег улазног записа; поставити НР , ФНР .

гетлине вар < фајл

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

цомманд | гетлине [ вар ]

Изведи команду да изводи излаз или у $ 0 или вар , као горе.

наредба | & гетлине [ вар ]

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

следећи

Прекини обраду текућег улазног записа. Следећи улазни запис се чита и обрада почиње са првим обрасцем у АВК програму. Ако се постигне крај улазних података, блокови ЕНД , ако постоје, се извршавају.

нектфиле

Прекини обраду тренутне улазне датотеке. Следећи прочитани унос података долази из следеће улазне датотеке. ФИЛЕНАМЕ и АРГИНД се ажурирају, ФНР се ресетује на 1, а обрада почиње првим обрасцем у АВК програму. Ако се постигне крај улазних података, блокови ЕНД , ако постоје, се извршавају.

принт

Штампа тренутни запис. Излазни запис се прекида са вриједношћу промјене ОРС-а .

принт екпр-лист

Штампа изразе. Сваки израз је одвојен вриједношћу ОФС варијабле. Излазни запис се прекида са вриједношћу промјене ОРС-а .

принт екпр-лист > датотеку

Штампа изразе у фајлу . Сваки израз је одвојен вриједношћу ОФС варијабле. Излазни запис се прекида са вриједношћу промјене ОРС-а .

принтф фмт, екпр-лист

Форматирајте и одштампајте.

принтф фмт, екпр-лист > фајл

Форматирајте и одштампајте датотеку .

систем ( цмд-линија )

Извршите команду цмд-линију и вратите статус изласка. (Ово можда неће бити доступно на не-ПОСИКС системима.)

ффлусх ( [ датотека ] )

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

Додатна преусмерења излаза су дозвољена за принт и принтф .

принт ... >> филе

додају излаз у датотеку .

принт ... | команда

пише на цеви.

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

шаље податке у заједнички процес.

Команда гетлине враћа 0 на крај датотеке и -1 на грешку. Након грешке, ЕРРНО садржи низ који описује проблем.

НАПОМЕНА: Ако користите цев или ко-процес да бисте добили линију или штампање или принтф унутар петље, морате користити цлосе () да бисте креирали нове инстанце команде. АВК аутоматски не затвара цеви или ко-процесира када врати ЕОФ.

Изјава принтф

Верзије АВК изјаве принтф и спринтф () (погледајте доле) прихватају следеће формате спецификације конверзије:

% ц

АСЦИИ знак. Ако је аргумент који се користи за % ц нумерички, третира се као знак и штампа. У супротном, претпоставља се да је аргумент стринг, а штампа се само први знак тог низа.

% д , % и

Децимални број (целобројни део).

% е,% Е

Број пливајуће тачке обрасца [-] д.дддддде [+ -] дд . Формат % Е користи Е уместо е .

% ф

Број пливајуће тачке обрасца [-] ддд.дддддд .

% г,% Г

Користите % е или % ф конверзију, у зависности од тога која је краћа, са ниским битним нулама. Формат % Г користи % Е уместо % е .

% о

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

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

% с

Низ знакова.

% к,% Кс

Неотписани хексадецимални број (цијели број). Формат % Кс користи АБЦДЕФ уместо абцдеф .

%%

Један % знак; ниједан аргумент није конвертован.

Опциони, додатни параметри могу бити између % и контролног слова:

број $

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

-

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

простор

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

+

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

#

Користите "алтернативни облик" за одређена контролна слова. За % о испоручите водећу нулу. За % к и % Кс испоручите водећи или 0Кс за нулти резултат. За % е , % Е и % ф , резултат увек садржи децималну тачку. За % г , и % Г , задње нуле се не уклањају из резултата.

0

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

ширина

Поље треба бити подложно овој ширини. Поље је обично подложно размацима. Ако се користи ознака 0 , она је обележена нулама.

. прец

Број који одређује прецизност за штампање. За % е , % Е и % ф формате, ово одређује број цифара које желите да одштампате десно од децималне тачке. За формате % г и % Г одређује максималан број значајних цифара. За формат % д , % о , % и , % у , % к , и % Кс , он одређује минимални број цифара за штампање. За % с , он одређује максималан број знакова из стринга који треба да се одштампа.

Подржане су динамичке ширине и прецизне могућности АНСИ Ц принтф () рутина. А * уместо ширине или прецизних спецификација узрокује да њихове вриједности буду узете из листе аргумената на принтф или спринтф () . Да бисте користили спецификацију положаја са динамичком ширином или прецизношћу, наведите број $ након * у низу формата. На пример, "% 3 $ * 2 $. * 1 $ с" .

Посебна имена датотека

Када врши преусмеравање И / О из штампања или принтф-а у датотеку, или преко гетлине-а из датотеке, гавк препознаје одређена посебна имена датотека интерно. Ова имена датотека омогућавају приступ отвореним дескрипторима датотека наслијеђеним од родитељског процеса гавк -а (обично схелл). Ова имена датотека се такође могу користити у командној линији за именовање датотека са подацима. Филенаме су:

/ дев / стдин

Стандардни улаз.

/ дев / стдоут

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

/ дев / стдерр

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

/ дев / фд / н

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

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

Штампај "Ти си га упропастио!" > "/ дев / стдерр"

док бисте иначе морали да користите

Штампај "Ти си га упропастио!" | "цат 1> & 2"

Следећа посебна имена датотека могу бити коришћена са оператером и кооперацијом за креирање ТЦП / ИП мрежних веза.

/ инет / тцп / лпорт / рхост / рпорт

Датотека за ТЦП / ИП конекцију на локалном порту преноси на удаљени хост рхост на удаљеном порту рпорт . Користите порт од 0 да би систем изабрао порт.

/ инет / удп / лпорт / рхост / рпорт

Слично, али користите УДП / ИП уместо ТЦП / ИП.

/ инет / рав / лпорт / рхост / рпорт

Резервисано за будућу употребу.

Друга посебна имена датотека обезбеђују приступ информацијама о покретном гавк процесу. Ове датотеке су сада застареле. Користите ПРОЦИНФО низ да бисте добили информације које пружају. Филенаме су:

/ дев / пид

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

/ дев / ппид

Читање ове датотеке враћа матични процесни ИД текућег процеса, у децималном броју, прекинут новом линијом.

/ дев / пгрпид

Читањем ове датотеке враћа се ИД процеса процеса текућег процеса, у децималном броју, окончан новом линијом.

/ дев / корисник

Читање ове датотеке враћа један запис који се прекида са новом линијом. Поља су одвојена размацима. $ 1 је вредност системског позива гетуид (2), $ 2 је вриједност системског позива гетеуид (2), $ 3 је вриједност системског позива гетгид (2), а $ 4 је вриједност гетегид (2) системски позив. Ако постоје нека додатна поља, они су ИД групе групе које враћају групе групе (2). Више група не може бити подржано на свим системима.

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

АВК има следеће уграђене аритметичке функције:

атан2 ( и , к )

Враћа арктангент и / к у радијанце.

цос ( екпр )

Враћа косинус експреса , који је у радијанцима.

екп ( екпр )

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

инт ( екпр )

Скраћује на цео број.

лог ( екпр )

Функција природног логаритма.

ранд ()

Враћа случајни број између 0 и 1.

син ( екпр )

Враћа синус израза , који је у радијанцима.

скрт ( екпр )

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

сранд ( [ екпр ] )

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

Функције Стринга

Гавк има следеће уграђене стринг функције:

асорт ( с [ , д ] )

Враћа број елемената у изворном низу с . Садржај с сортиран је помоћу нормалних правила Гавк -а за упоређивање вредности, а индекси сортираних вриједности с замјењују се са секвенцијалним цјелинама почевши од 1. Ако је дефинисан опциони циљни низ д , онда се с прво дуплира у д , а затим се сортира д , остављајући индексе изворног поља с непромењене.

генсуб ( р , с , х [ , т ] )

Претражите циљну тачку т за утакмице регуларног израза р . Ако је х низ који почиње са г или Г , онда замените све утакмице р с с . У супротном, х је број који указује на то који се меч за р замени. Ако т није испоручен, уместо тога се користи $ 0 . У тексту замене с , секвенца \ н , где је н број од 1 до 9, може се користити да би се назначио само текст који одговара н -у подразрењу у загради. Секвенца \ 0 представља цео одговарајући текст, као и знак & . За разлику од суб () и гсуб () , модификовани низ се враћа као резултат функције, а оригинални циљни низ се не мења.

гсуб ( р , с [ , т ] )

За сваку подстрингу која одговара редовном изразу р у низу т , замените стринг с и вратите број замена. Ако т није испоручен, користите $ 0 . У & тексту замене замењен је текстом који је уствари упарен. Користите \ & да бисте добили буквално & . (Ово мора да буде унесено као "\\ &" ; погледајте ГАВК: Ефективно АВК програмирање за потпунију расправу о правилима за & с и кревом обрнутости у заменском тексту суб () , гсуб () и генсуб () .)

индекс ( с , т )

Враћа индекс стринга у низу с , или 0 ако т није присутан. (То значи да индикатори карактера почињу у једном.)

дужина ( [ с ] )

Враћа дужину стринга с , или дужину од 0 ако је с није испоручено.

меч ( с , р [ , а ] )

Враћа позицију у с где се појављује регуларни израз р , или 0 ако р није присутан, и поставља вриједности РСТАРТ и РЛЕНГТХ . Имајте на уму да је редослед аргумента исти као и за ~ оператор: стр ~ ре . Ако је поље а обезбеђено, а је обрисано, а затим се елементи од 1 до н попуњавају дијеловима с који одговарају одговарајућој подизразији у р . 0-ти елемент а садржи део с који одговара целом регуларном изразу р .

сплит ( с , а [ , р ] )

Раздваја стринг у низ у а на регуларном изразу р , и враћа број поља. Ако је р изостављен, уместо тога се користи ФС . Арраи а се прво брише. Раздвајање се понаша идентично са поделом поља, описаном горе.

спринтф ( фмт , екпр-лист )

Штампа екпр-листу према фмт-у , и враћа резултујући низ.

стртонум ( стр )

Испитајте стр , и враћа своју нумеричку вредност. Ако стр почиње са водећим 0 , стртонум () претпоставља да је стр октални број. Ако стр почиње са водећим или 0Кс , стртонум () претпоставља да је стр хексадецимални број.

суб ( р , с [ , т ] )

Баш као и гсуб () , али је замењен само први подударајући подстран.

субстр ( с , и [ , н ] )

Враћа највише н- карактерне подлоге с почетка на и . Ако је н изостављено, користи се остатак с .

толовер ( стр )

Враћа копију струне стринга, са свим великим словима у стр преведене у њихове одговарајуће матичне колоне. Неафазни знакови остају непромењени.

тоуппер ( стр )

Враћа копију стринг стрита , а сви мала слова у стр преведу у њихове одговарајуће супарнике великих слова. Неафазни знакови остају непромењени.

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

Пошто једна од примарних употреба АВК програма обрађује датотеке дневника који садрже информације о временским жиговима, гавк пружа сљедеће функције за добијање временских марака и њихово форматирање.

мктиме ( датумпец )

Ручи датумек у временску ознаку истог облика који је вратио систиме () . Датепец је низ облика ИИИИ ММ ДД ХХ ММ СС [ДСТ] . Садржај низа је шест или седам бројева који представљају целу годину, укључујући век, месец од 1 до 12, дан у месецу од 1 до 31, сат дана од 0 до 23, минут од 0 до 59, а други од 0 до 60, као и опционо летњи штедни сигнал. Вредности ових бројева не морају бити у оквиру одређених опсега; на пример, сат -1 значи 1 сат пре поноћи. Грегоријански календар са почетним нулама је претпостављен, са годином 0 претходне године 1 и године -1 претходне године 0. Претпоставља се да је време у локалном временском зони. Ако је застава за полетање позитивна, претпоставља се да је време за летње рачунање времена; ако је нула, претпоставља се да је време стандардно време; и ако је негативан (подразумевано), мктиме () покушава да утврди да ли је летње рачунање на снази у одређено време. Ако датотеци не садржи довољно елемената или ако је резултујуће време ван домета, мктиме () враћа -1.

стрфтиме ( [ формат [ , тиместамп ]] )

Обликује временску ознаку у складу са спецификацијама у формату. Временска ознака мора бити у истом облику као што је вратио систиме () . Ако временска ознака недостаје, користи се тренутно време дана. Ако формат недостаје, користи се подразумевани формат који одговара излазу датума (1). Погледајте спецификацију за стрфтиме () функцију у АНСИ Ц за конверзије формата за које је гарантовано да су доступне. Верзија јавног домена стрфтиме (3) и ман страница за њега долазе са гавк ; ако је та верзија кориштена за изградњу гавка , онда су све конверзије описане на овој страни човјека доступне за гавк.

систиме ()

Враћа тренутно време дана као број секунди од Епоха (1970-01-01 00:00:00 УТЦ на ПОСИКС системима).

Бит Манипулације Функције

Почевши од верзије 3.1 гавк , доступне су следеће функције манипулације битова. Они раде тако што претварају вредности двоструке прецизности са плутајућим тачкама на непотписане дугачке целине, обављају операцију, а затим конвертују резултат на плутајућу тачку. Функције су:

и ( в1 , в2 )

Повратите битну вредност АНД вредности које су добили од в1 и в2 .

цомпл ( вал )

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

лсхифт ( вал , број )

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

или ( в1 , в2 )

Повратите битну ОР вредности које су добили од в1 и в2 .

рсхифт ( вал , број )

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

кор ( в1 , в2 )

Вратите битно КСОР вредности које су дате од в1 и в2 .

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

Почевши од верзије 3.1 гавк, у оквиру вашег АВК програма могу се користити следеће функције за превођење жица у вријеме извршавања. За све детаље погледајте ГАВК: Ефективно АВК програмирање .

биндтектдомаин ( директоријум [ , домен ] )

Специфицира директоријум у којем гавк тражи датотеке .мо , у случају да се неће или не могу ставити у "стандардне" локације (нпр. Током тестирања). Враћа директоријум у којем је домен `` везан. ''

Подразумевани домен је вредност ТЕКСТДОМАИН-а . Ако је директориј нулл стринг ( "" ), онда биндтектдомаин () враћа тренутну везу за дату домену .

дцгеттект ( стринг [ , домен [ , категорија ]] )

Враћа превод стринга у домену текстуалног домена за категорију категорија категорија . Подразумевана вредност за домен је тренутна вредност ТЕКСТДОМАИН-а . Подразумевана вредност за категорију је "ЛЦ_МЕССАГЕС" .

Ако испоручите вредност за категорију , она мора бити низ једнак једној од познатих категорија локала описаних у ГАВК: Ефективно АВК програмирање . Такође морате доставити текстуални домен. Користите ТЕКСТДОМАИН ако желите да користите тренутни домен.

дцнгеттект ( стринг1 , стринг2 , број [ , домен [ , категорија ]] )

Враћа множину форму која се користи за број превођења стринг1 и стринг2 у домену текстуалног домена за категорију категорија категорија . Подразумевана вредност за домен је тренутна вредност ТЕКСТДОМАИН-а . Подразумевана вредност за категорију је "ЛЦ_МЕССАГЕС" .

Ако испоручите вредност за категорију , она мора бити низ једнак једној од познатих категорија локала описаних у ГАВК: Ефективно АВК програмирање . Такође морате доставити текстуални домен. Користите ТЕКСТДОМАИН ако желите да користите тренутни домен.

КОРИШТЕНЕ ФУНКЦИЈЕ КОРИСНИКА

Функције у АВК-у су дефинисане на следећи начин:

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

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

Пошто функције нису првобитно биле део АВК језика, одредба за локалне варијабле је прилично неспретна: они су проглашени додатним параметрима у листи параметара. Конвенција је да раздвоје локалне варијабле од стварних параметара помоћу додатних мјеста у листи параметара. На пример:

функција ф (п, к, а, б) # а и б су локална {...} / абц / {...; ф (1, 2); ...}

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

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

Користите ретурн екпр да бисте вратили вредност из функције. Повратна вриједност је недефинирана ако ниједна вриједност није дата, или ако се функција враћа "пада" крај.

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

Ријеч фунц се може користити уместо функције .

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

Почевши од верзије 3.1 гавк-а , можете динамичким додати нове уграђене функције на гоничастог тумача. Пуни детаљи су изван оквира овог приручника; погледајте ГАВК: Ефективно АВК програмирање за детаље.

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

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

Ова функција је обезбеђена и документована у ГАВК: Ефективно АВК програмирање , али све о овој особини ће се вероватно промијенити у следећем издању. Ми СТРОНГГЛИ препоручујемо да не користите ову функцију за све што нисте спремни да поновите.

СИГНАЛИ

пгавк прихвата два сигнала. СИГУСР1 доводи до тога да смакне профил и функцију стацк позива у датотеку профила, што је или авкпроф.оут , или било која датотека је именована у опцији --профиле . Тада наставља да трчи. СИГХУП доводи до тога да отпусти профил и функцију стакла и затим изађе.

ПРИМЕРИ

Штампајте и сортирајте имена за пријављивање свих корисника: БЕГИН {ФС = ":"} {принт $ 1 | "сортирај"} Бројеви линија у фајлу: {нлинес ++} ЕНД {принт нлинес} Прецеде сваку линију по броју у датотеци: {принт ФНР, $ 0} Конкретни и број линије (варијација на тему): {принт НР, $ 0}

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

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

гавк 'БЕГИН {принт "Здраво, свет"} "

увек штампа здраво, свет . Али,

гавк 'БЕГИН {принт _ "Здраво, свет"} "

могу да штампају боњоур, монде у Француској.

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

1.

Додајте акцију БЕГИН да бисте додијелили вриједност променљивој ТЕКСТДОМАИН- у да бисте поставили текстуални домен на име повезано са вашим програмом.


БЕГИН {ТЕКСТДОМАИН = "мипрог"}

Ово омогућава гавк- у да пронађе .мо датотеку повезану са вашим програмом. Без овог корака, гавк користи текстуални домен, који вероватно не садржи преводе за ваш програм.

2.

Означите све жице које треба превести са водећим подвучицама.

3.

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

4.

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

5.

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

Функције интернационализације су детаљно описане у ГАВК: Ефективно АВК програмирање .

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

Примарни циљ за гавк је компатибилност са ПОСИКС стандардом, као и са најновијом верзијом УНИКС авк-а . У том циљу, гавк укључује сљедеће корисничке видљиве карактеристике које нису описане у АВК књизи, али су дио Белл Лабораториес верзије авк и налазе се у ПОСИКС стандарду.

Књига указује на то да додјела варијабли командне линије се деси када авк иначе отвори аргумент као датотеку, која је након извршења БЕГИН блока. Међутим, у ранијим имплементацијама, када се такав задатак појавио пре било којег имена датотеке, додјељивање би се десило прије покретања БЕГИН блока. Апликације су зависиле од ове "функције". Када је авк промијењен да би се подударала са његовом документацијом, додат је за додељивање варијабли прије извршавања програма, како би се прилагодиле апликацијама које су зависиле од старог понашања. (Ова карактеристика је договорена од стране Белл Лабораториес и ГНУ девелопера.)

Опција за специфичне функције имплементације је из ПОСИКС стандарда.

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

Књига АВК не дефинише повратну вредност сранд () . ПОСИКС стандард има повратак семена који је користио, како би се омогућило праћење секвенци случајних бројева. Због тога сранд () у гавк- у такође враћа своје садашње семе.

Остале нове функције су: Коришћење више опција (од МКС авк ); ЕНВИРОН низ; \ а , и \ в есцапе секвенце (учињено првобитно у гавк и враћено у верзију Белл Лабораториес); толовер () и тоуппер () уграђене функције (из верзије Белл Лабораториес); и спецификације конверзије АНСИ Ц у принтф (учињено прво у верзији Белл Лабораториес).

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

Постоје две карактеристике историјских АВК имплементација које гавк подржава. Прво, могуће је назвати функцију ленгтх () уграђену не само без аргумената, већ чак и без заграда! Тако,

а = дужина # Холи Алгол 60, Батман!

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

а = дужина ()
а = дужина (0 долара)

Ова карактеристика је означена као "застарјела" у ПОСИКС стандарду, а гавк издаје упозорење о његовој употреби ако је у командној линији одређено -линт .

Друга карактеристика је употреба наставака за наставак или пауза изван тијела за неко време , за или чинити петљу. Традиционалне имплементације АВК третирале су такву употребу као еквивалент следећој изјави. Гавк подржава ову употребу ако је наведен -традитионал .

ГНУ екстензије

Гавк има низ екстензија на ПОСИКС авк . Они су описани у овом одељку. Сви овде описани екстензиви могу бити онемогућени позивом гавк-а са --традитионал опцијом.

Следеће функције гавк- а нису доступне у ПОСИКС авк-у .

*

Није тражено претраживање путање за датотеке назване путем опције . Стога варијабла окружења АВКПАТХ није посебна.

*

\ Кс есцапе секуенце. (Онемогућено са --посик .)

*

Функција ффлусх () . (Онемогућено са --посик .)

*

Способност да наставите са редовима ? и:. (Онемогућено са --посик .)

*

Окталне и хексадецималне константе у АВК програмима.

*

АРГИНД , БИНМОДЕ , ЕРРНО , ЛИНТ , РТ и ТЕКСТДОМАИН променљиве нису посебне.

*

Варијабле ИГНОРЕЦАСЕ и њени нежељени ефекти нису доступни.

*

ФИЕЛДВИДТХС варијабла и дељење поља фиксне ширине.

*

ПРОЦИНФО низ није доступан.

*

Коришћење РС-а као регуларног израза.

*

Посебна имена датотека доступна за преусмеравање И / О нису препозната.

*

| & Оператор за креирање заједничких процеса.

*

Способност поделити појединачне знакове користећи нулл стринг као вредност ФС-а , и као трећи аргумент за сплит () .

*

Необавезни други аргумент за функцију цлосе () .

*

Опциони трећи аргумент за функцију Матцх () .

*

Могућност кориштења позицијских одредишта са принтф и спринтф () .

*

Коришћење брисања поља за брисање читавог садржаја низа.

*

Коришћење следећег фајла за одустајање од обраде тренутне улазне датотеке.

*

(И) , асорт () , биндтектдомаин () , цомпл () , дцгеттект () , генсуб () , лсхифт () , мктиме () или () , рсхифт () , стрфтиме () , стртонум () , систиме () и кор () функције.

*

Локализоване жице.

*

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

Књига АВК не дефинише повратну вредност функције цлосе () . Гавк'с цлосе () враћа вредност из фцлосе (3), или пцлосе (3), при затварању излазне датотеке или цеви, респективно. Враћа статус излазног процеса приликом затварања улазне цеви. Повратна вредност је -1 ако именована датотека, цијев или со-процес није отворена са преусмеравањем.

Када је гавк позван са --традитионал опцијом, ако је аргумент фс опцији "т", онда је ФС подешен на знак таб. Имајте на уму да типкање гавк -Ф \ т ... једноставно узрокује да схелл наведе `` т, '' и не пролази `` \ т '' у опцију . Пошто је ово прилично ружан посебан случај, то није подразумевано понашање. Ово понашање такође се не појављује ако је спецификован --посик . Да бисте заиста добили знак табла као сепаратор поља, најбоље је користити појединачне цитате: гавк -Ф '\ т' ....

Погледајте остале команде : ваит , лп , цомплете , екецв , гетфацл , иоцтл , уник , рммод , пвцреате , рсх , уник2дос , цал , фс , цд , ивприв , ат , вхо , ивцонфиг , ифцонфиг , вгдисплаи , опен , лсмод , нтохс , маилк , килл , втмп