пСЙНБНДЯРБН ОНКЭГНБЮРЕКЪ ДКЪ GNU Awk

Arnold D. Robbins
ОЕПЕБНД аЮКСЕБЮ ю. м.

15. аХАКХНРЕЙЮ ТСМЙЖХИ awk

нЦКЮБКЕМХЕ

щРЮ ЦКЮБЮ ОПЕДЯРЮБКЪЕР АХАКХНРЕЙС ОНКЕГМШУ ТСМЙЖХИ awk. б ОПХЛЕПЮУ ОПНЦПЮЛЛ, ОПЕДЯРЮБКЕММШУ МХФЕ, (ЯЛ. ЦКЮБС 16 [оПЮЙРХВЕЯЙХЕ awk-ОПНЦПЮЛЛШ], ЯРП.205) ХЯОНКЭГСЧРЯЪ ЩРХ ТСМЙЖХХ. тСМЙЖХХ ГДЕЯЭ ОПЕДЯРЮБКЕМШ Б ОНПЪДЙЕ НР ОПНЯРШУ Й ЯКНФМШЛ. пЮГДЕК 16.2.7 [хГБКЕВЕМХЕ ОПНЦПЮЛЛ ХГ ТЮИКНБ Texinfo Source], ЯРП. 238, ОПЕДЯРЮБКЪЕР ОПНЦПЮЛЛС, ЙНРНПСЧ ЛНФМН ХЯОНКЭГНБЮРЭ ДКЪ ХГБКЕВЕМХЪ ХЯУНДМНЦН ЙНДЮ ЩРХУ ОПХЛЕПНБ АХАКХНРЕВМШУ ТСМЙЖХИ Х ОПНЦПЮЛЛ ХГ Texinfo source ДКЪ ЩРНИ ЙМХЦХ. (щРН АШКН СФЕ ЯДЕКЮМН ЙЮЙ ВЮЯРЭ ПЮЯОПНЯРПЮМЕМХЪ gawk.

еЯКХ БШ МЮОХЯЮКХ НДМС ХКХ АНКЕЕ ОНКЕГМШУ awk-ТСМЙЖХИ НАЫЕЦН МЮГМЮВЕМХЪ Х ЦНРНБШ ОПЕДКНФХРЭ ХУ ДКЪ ХГДЮМХЪ Б ЩРНИ ЙМХЦЕ, БЯРСОХРЕ Б ЙНМРЮЙР Я ЕЕ ЮБРНПНЛ. яЛ. ПЮГДЕК B.7 [яННАЫЕМХЪ Н ОПНАКЕЛЮУ Х НЬХАЙЮУ], ЯРП. 292, ДКЪ ХМТНПЛЮЖХХ Н РНЛ, ЙЮЙ ЩРН ЯДЕКЮРЭ. мЕ НЦПЮМХВХБЮИРЕЯЭ РНКЭЙН ОНЯШКЙНИ ЙНДЮ, ЙНЦДЮ БЮЛ ОПЕДКНФЮР ОНЛЕЯРХРЭ ЕЦН Б НАКЮЯРЭ ОСАКХВМНЦН ДНЯРСОЮ, НОСАКХЙНБЮРЭ Б ПЮЛЙЮУ GPL (ЯЛ. [GNU GENERAL PUBLIC LICENSE], ЯРП. 309), ХКХ ОЕПЕДЮРЭ copyright Б Free Software Foundation.

15.1 лНДЕКХПНБЮМХЕ ЯОЕЖХЮКЭМШУ ЯБНИЯРБ gawk

б МЮВЮКН ЯРПЮМХЖШ

оПНЦПЮЛЛШ Б ЩРНИ ЦКЮБЕ Х Б ЦКЮБЕ 16 [оПЮЙРХВЕЯЙХЕ ОПНЦПЮЛЛШ awk], ЯРП. 205, ХЯОНКЭГСЧР БНГЛНФМНЯРХ, ЯОЕЖХТХВМШЕ ДКЪ gawk. б ЩРНИ ЦКЮБЕ ЙНПНРЙН НАЯСФДЮЕРЯЪ, ЙЮЙ БШ ЛНФЕРЕ ОЕПЕОХЯЮРЭ ЩРХ ОПНЦПЮЛЛШ ДКЪ ДПСЦХУ ПЮГКХВМШУ ПЕЮКХГЮЖХИ awk.

дХЮЦМНЯРХВЕЯЙХЕ ЯННАЫЕМХЪ НА НЬХАЙЮУ ОНЯШКЮЧРЯЪ Б `/dev/stderr'. оХЬХРЕ `-- "cat 1?&2"' БЛЕЯРН `? "/dev/stderr"', ЕЯКХ БЮЬЮ ЯХЯРЕЛЮ МЕ ХЛЕЕР `/dev/stderr', ХКХ ЕЯКХ МЕ ЛНФЕРЕ ХЯОНКЭГНБЮРЭ gawk.

мЕЙНРНПШЕ ОПНЦПЮЛЛШ ХЯОНКЭГСЧР nextfile (ЯЛ. ПЮГДЕК 9.8 [нОЕПЮРНП nextfile], ЯРП. 112), ДКЪ ОПНОСЯЙЮ НЯРЮРЙЮ ББНДЮ Б БУНДМНЛ ТЮИКЕ. пЮГДЕК 15.2 [пЕЮКХГЮЖХЪ nextfile ЙЮЙ ТСМЙЖХХ], ЯРП. 170, ОНЙЮГШБЮЕР, ЙЮЙ МЮОХЯЮРЭ ТСМЙЖХЧ, ЙНРНПЮЪ ДЕКЮЕР РН ФЕ ЯЮЛНЕ.

мЮЙНМЕЖ, МЕЙНРНПШЕ ОПНЦПЮЛЛШ ОПЕДОНВХРЮЧР ХЦМНПХПНБЮРЭ ПЮГКХВХЕ БЕПУМЕЦН Х МХФМЕЦН ПЕЦХЯРПНБ Б ЯБНЕЛ ББНДЕ. нМХ ДЕКЮЧР ЩРН ОПХЯБЮХБЮМХЕЛ ЕДХМХЖШ ОЕПЕЛЕММНИ IGNORECASE. рНР ФЕ ЯЮЛШИ ЩТТЕЙР ЛНФМН ОНКСВХРЭ, ДНАЮБХБ ЯКЕДСЧЫЕЕ ОПЮБХКН Й МЮВЮКС ОПНЦПЮЛЛШ:

# ignore case - $0 = tolower($0) ""

оПНБЕПЭРЕ РЮЙФЕ, ВРН БЯЕ ЙНМЯРЮМРШ regexp Х ЯРПНЙНБШЕ ЙНМЯРЮМРШ, ХЯОНКЭГСЕЛШЕ Б ЯПЮБМЕМХЪУ, ЯНЯРНЪР РНКЭЙН ХГ АСЙБ МХФМЕЦН ПЕЦХЯРПЮ.

15.2 пЕЮКХГЮЖХЪ nextfile ЙЮЙ ТСМЙЖХХ

б МЮВЮКН ЯРПЮМХЖШ

нОЕПЮРНП nextfile, НОХЯЮММШИ Б ПЮГДЕКЕ 9.8 [нОЕПЮРНП nextfile], ЯРП. 112, ЕЯРЭ ЯОЕЖХЮКЭМНЕ ПЮЯЬХПЕМХЕ gawk. нМ МЕДНЯРСОЕМ Б ДПСЦХУ ПЕЮКХГЮЖХЪУ awk. б МЮЯРНЪЫЕЛ ПЮГДЕКЕ ОПХБЕДЕМШ ДБЕ БЕПЯХХ ТСМЙЖХХ nextfile, ЙНРНПШЕ ЛНФМН ХЯОНКЭГНБЮРЭ ДКЪ ЛНДЕКХПНБЮМХЪ ЯННРБЕРЯРБСЧЫЕЦН НОЕПЮРНПЮ gawk, ЕЯКХ МЕБНГЛНФМН ХЯОНКЭГНБЮРЭ gawk.

бНР ОЕПБЮЪ ОНОШРЙЮ МЮОХЯЮРЭ ТСМЙЖХЧ nextfile.

# nextfile --- ОПНОСЯРХРЭ НЯРЮБЬХЕЯЪ ГЮОХЯХ Б РЕЙСЫЕЛ ТЮИКЕ
# ЩРН ДНКФМН АШРЭ ОПНВХРЮМН ДН "ЦКЮБМНИ" ОПНЦПЮЛЛШ awk
function  nextfile()
- .abandon. = FILENAME; next "" .abandon. == FILENAME - next ""

щРНР ТЮИК ДНКФЕМ АШРЭ БЯРЮБКЕМ ОЕПЕД ЦКЮБМНИ ОПНЦПЮЛЛНИ, ОНРНЛС ВРН НМ ЯНДЕПФХР ОПЮБХКН, ЙНРНПНЕ ДНКФМН БШОНКМЪРЭЯЪ c ЯЮЛНЦН МЮВЮКЮ. щРН ОПЮБХКН ЯПЮБМХБЮЕР ХЛЪ РЕЙСЫЕЦН ТЮИКЮ ДЮММШУ (ЙНРНПНЕ БЯЕЦДЮ МЮУНДХРЯЪ Б ОЕПЕЛЕММНИ FILENAME) Я ХМДХБХДСЮКЭМНИ ОЕПЕЛЕММНИ, МЮГБЮММНИ .abandon.. еЯКХ ХЛЪ ТЮИКЮ ЯННРБЕРЯРБСЕР, РН ДЕИЯРБХЕ ОПЮБХКЮ БШОНКМЪЕР НОЕПЮРНП next, РН ЕЯРЭ ОЕПЕИРХ Й ЯКЕДСЧЫЕИ ГЮОХЯХ. (сОНРПЕАКЕМХЕ `.' Б ХЛЕМХ ОЕПЕЛЕМЕММНИ ЕЯРЭ ЯНЦКЮЬЕМХЕ. нМН ОНДПНАМЕЕ НАЯСФДЮЕРЯЪ Б ПЮГДЕКЕ 15.13 [мЮХЛЕМНБЮМХЕ ЦКНАЮКЭМШУ ОЕПЕЛЕММШУ АХАКХНРЕВМШУ ТСМЙЖХИ], ЯРП. 202). хЯОНКЭГНБЮМХЕ НОЕПЮРНПЮ next ТЮЙРХВЕЯЙХ ЯНГДЮЕР ЖХЙК, ЙНРНПШИ ВХРЮЕР БЯЕ ГЮОХЯХ ХГ РЕЙСЫЕЦН ТЮИКЮ Я ДЮММШЛХ. б ХРНЦЕ ДНЯРХЦЮЕРЯЪ ЙНМЕЖ ТЮИКЮ Х НРЙПШБЮЕРЯЪ МНБШИ ТЮИК Я ДЮММШЛХ, ХГЛЕМЪЧЫХИ ГМЮВЕМХЕ FILENAME. йНЦДЮ ЩРН ОПНХГНИДЕР, ЯПЮБМЕМХЕ .abandon. Я FILENAME БШДЮЕР false Х БШОНКМЕМХЕ ОПНДНКФЮЕРЯЪ Я ОЕПБНЦН ОПЮБХКЮ "ПЕЮКЭМНИ" ОПНЦПЮЛЛШ.

яЮЛЮ ТСМЙЖХЪ nextfile ОПНЯРН СЯРЮМЮБКХБЮЕР ГМЮВЕМХЕ .abandon. Х ГЮРЕЛ БШОНКМЪЕР НОЕПЮРНП next ДКЪ ГЮОСЯЙЮ ЖХЙКЮ.1

щРЮ МЮВЮКЭМЮЪ БЕПЯХЪ ХЛЕЕР МЕЙНРНПСЧ МЕРНВМНЯРЭ. вРН ОПНХГНИДЕР, ЕЯКХ РНР ФЕ ЯЮЛШИ ТЮИК Я ДЮММШЛХ СЙЮГЮМ ДБЮФДШ Б ЙНЛЮМДМНИ ЯРПНЙЕ, ДБЮ ПЮГЮ ОНДПЪД, ХКХ ДЮФЕ Я ОПХЯБЮХБЮМХЕЛ ГМЮВЕМХЪ ОЕПЕЛЕММНИ ЛЕФДС ДБСЛЪ СЙЮГЮМХЪЛХ ХЛЕМХ ТЮИКЮ? б РЮЙНЛ ЯКСВЮЕ ОПНЦПЮЛЛЮ ОПНОСЯРХР БРНПНИ ТЮИК, ДЮФЕ ЕЯКХ НМЮ ДНКФМЮ НЯРЮМНБХРЭЯЪ, ЙНЦДЮ ДНЯРХЦМЕР ЙНМЕЖ ОЕПБНЦН ХГ СЙЮГЮММШУ. бНР БРНПЮЪ БЕПЯХЪ nextfile, ЙНРНПЮЪ ПЕЬЮЕР ЩРС ОПНАКЕЛС.


1 мЕЙНРНПШЕ ПЕЮКХГЮЖХХ awk МЕ ОНГБНКЪЧР БЮЛ БШОНКМЪРЭ next БМСРПХ РЕКЮ ТСМЙЖХХ. мЕНАУНДХЛШ ЙЮЙХЕ-РН ДПСЦХЕ ОПХЕЛШ, ЕЯКХ БШ ХЯОНКЭГСЕРЕ РЮЙСЧ БЕПЯХЧ.
# nextfile --- ОПНОСЯРХРЭ НЯРЮБЬХЕЯЪ Б РЕЙСЫЕЛ ТЮИКЕ ГЮОХЯХ
# ОПЮБХКЭМН НАПЮАЮРШБЮРЭ ОНЯКЕДНБЮРЕКЭМШЕ ОНЪБКЕМХЪ РНЦН ФЕ ТЮИКЮ
# Arnold Robbins, arnold@gnu.org, Public Domain
# May, 1993
# ЩРН ДНКФМН АШРЭ ОПНВРЕМН  ДН "ЦКЮБМНИ" awk-ОПНЦПЮЛЛШ
function nextfile()
- .abandon. = FILENAME; next "" .abandon. == FILENAME -
if (FNR == 1)
.abandon. = "" else
next ""

дЕИЯРБХЪ nextfile МЕ ЛЕМЪЧРЯЪ. нМЮ СЯРЮМЮБКХБЮЕР .abandon. ПЮБМШЛ РЕЙСЫЕЛС ХЛЕМХ ТЮИКЮ Х БШОНКМЪЕР НОЕПЮРНП next. нМ ВХРЮЕР ЯКЕДСЧЫСЧ ГЮОХЯЭ Х СБЕКХВХБЮЕР FNR, РЮЙ ВРН FNR ОНКСВЮЕР ОН ЙПЮИМЕИ ЛЕПЕ ГМЮВЕМХЕ ДБЮ. нДМЮЙН, ЕЯКХ nextfile БШГБЮМ ДКЪ ОНЯКЕДМЕИ ГЮОХЯХ Б ТЮИКЕ, РН awk ГЮЙПНЕР РЕЙСЫХИ ТЮИК Я ДЮММШЛХ Х ОЕПЕИДЕР Й ЯКЕДСЧЫЕЛС. оПХ ЩРНЛ FILENAME ОНКСВХР ГМЮВЕМХЕ ХЛЕМХ МНБНЦН ТЮИКЮ Х FNR ОНКСВХР ГМЮВЕМХЕ НДХМ. еЯКХ ЩРНР ЯКЕДСЧЫХИ ТЮИК ЕЯРЭ РНР ФЕ, ВРН Х ОПЕДШДСЫХИ, .abandon. АСДЕР ЕЫЕ ПЮБМН FILENAME. нДМЮЙН, FNR АСДЕР ПЮБМН ЕДХМХЖЕ, ЦНБНПЪ МЮЛ, ВРН ЛШ ХЛЕЕЛ ДЕКН Я МНБШЛ ТЮИКНЛ, МЕ РЕЛ, ЙНРНПШИ ВХРЮКХ ОПХ БШОНКМЕМХХ ТСМЙЖХХ nextfile. б ЩРНЛ ЯКСВЮЕ .abandon. ОНКСВЮЕР ГМЮВЕМХЕ ОСЯРНИ ЖЕОНВЙХ, ДЮКЭМЕИЬЕЦН БШОНКМЕМХЪ ЩРНЦН ОПЮБХКЮ МЕ ОПНХЯУНДХР (ОНЙЮ nextfile МЕ АСДЕР БШГБЮМЮ Б ЯКЕДСЧЫХИ ПЮГ). еЯКХ ФЕ FNR ХЛЕЕР ГМЮВЕМХЕЛ МЕ ЕДХМХЖС, РН ЛШ ЕЫЕ МЮУНДХЛЯЪ Б ОПЕФМЕЛ ТЮИКЕ Х ОПНЦПЮЛЛЮ БШОНКМЪЕР НОЕПЮРНП next ДКЪ ОПНОСЯЙЮ ЕЦН ЙНМЖЮ.

бЮФМШЛ БНОПНЯНЛ Б ЩРНИ РНВЙЕ АСДЕР РЮЙНИ: "ЕЯКХ ДЕИЯРБХЪ nextfile ЛНДЕКХПСЧРЯЪ АХАКХНРЕВМНИ ТСМЙЖХЕИ, ГЮВЕЛ ЩРНР НОЕПЮРНП БЯРПНЕМ Б gawk?" щРН ДЕИЯРБХРЕКЭМН БЮФМШИ БНОПНЯ. дНОНКМХРЕКЭМШЕ ЯБНИЯРБЮ ОПХ ЛЮКНИ МЮДНАМНЯРХ ОПХБНДЪР Й АНКЕЕ ЯКНФМНИ Х ЛЕДКЕММНИ ОПНЦПЮЛЛЕ, ЙНРНПСЧ РПСДМЕЕ ОНДДЕПФХБЮРЭ. нРБЕР ЯНЯРНХР Б РНЛ, ВРН БЯРПЮХБЮМХЕ nextfile Б gawk ДЮЕР ГМЮВХРЕКЭМШИ БШХЦПШЬ Б ЩТТЕЙРХБМНЯРХ. еЯКХ ТСМЙЖХЪ nextfile БШОНКМЪЕРЯЪ Б МЮВЮКЕ АНКЭЬНЦН ТЮИКЮ, awk АСДЕР ЯЙЮМХПНБЮРЭ БЕЯЭ ТЮИК, ПЮЯЫЕОКЪЪ ЕЦН МЮ ГЮОХЯХ, ВРНАШ ОПНОСЯРХРЭ ЕЦН НАПЮАНРЙС. бЯРПНЕММШИ НОЕПЮРНП nextfile ЛНФЕР ОПНЯРН ГЮЙПШРЭ МЕЛЕДКЕММН ТЮИК Х ОЕПЕИРХ Й ЯКЕДСЧЫЕЛС, ЩЙНМНЛЪ ЛМНЦН БПЕЛЕМХ. щРН НЯНАЕММН БЮФМН Б awk, ОНЯЙНКЭЙС awk-ОПНЦПЮЛЛШ НАШВМН НПХЕМРХПНБЮМШ МЮ I/O (Р.Е. НМХ АНКЭЬСЧ ВЮЯРЭ БПЕЛЕМХ РПЮРЪР МЮ ББНД Х БШБНД, Ю МЕ МЮ БШВХЯКЕМХЪ.

15.3 йНМРПНКЭ

б МЮВЮКН ЯРПЮМХЖШ

оПХ МЮОХЯЮМХХ АНКЭЬХУ ОПНЦПЮЛЛ ВЮЯРН ОНКЕГМН АШРЭ Б ЯНЯРНЪМХХ ОПНБЕПХРЭ, ВРН МЕЙНРНПНЕ СЯКНБХЕ ХКХ ЛМНФЕЯРБН СЯКНБХИ ЯНАКЧДЮЧРЯЪ. оЕПЕД ОЕПЕУНДНЛ Й МЕЙНРНПШЛ БШВХЯКЕМХЪЛ ЯКЕДСЕР ОПНБЕПХРЭ, ВРН ОЕПЕД БЮЛХ КЕФХР ХЛЕММН МСФМШИ ЯКСВЮИ. рЮЙХЕ НОЕПЮРНПШ МЮГШБЮЧРЯЪ "СРБЕПФДЕМХЪЛХ" ("assertion"). б ЪГШЙЕ яХ ЕЯРЭ ТЮИКШ Я ГЮЦНКНБЙНЛ !assert.h? Х ЯННРБЕРЯРБСЧЫХЕ ЛЮЙПН assert, ЙНРНПШЕ ОПНЦПЮЛЛХЯР ЛНФЕР ХЯОНКЭГНБЮРЭ ДКЪ СРБЕПФДЕМХИ. еЯКХ СРБЕПФДЕМХЕ КНФМН, ЛЮЙПН assert ОЕВЮРЮЕР ДХЮЦМНЯРХВЕЯЙНЕ ЯННАЫЕМХЕ, НОХЯШБЮЧЫЕЕ МЮПСЬЕММНЕ СЯКНБХЕ, Х САХБЮЕР ОПНЦПЮЛЛС. б яХ, ХЯОНКЭГНБЮМХЕ СРБЕПФДЕМХЪ БШЦКЪДХР РЮЙ:

#include !assert.h?
int myfunc(int a, double b) -
assert(a != 5 && b ?= 17); ... ""

еЯКХ СРБЕПФДЕМХЕ МЕ БШОНКМЕМН, ОПНЦПЮЛЛЮ МЮОЕВЮРЮЕР ВРН-МХАСДЭ БПНДЕ:

prog.c:5: assertion failed: a != 5 && b ?= 17

ъГШЙ ANSI C ДЮЕР БНГЛНФМНЯРЭ ОПЕБПЮРХРЭ СЯКНБХЕ Б ЖЕОНВЙС ДКЪ ОЕВЮРХ ДХЮЦМНЯРХЙХ. щРН МЕБНГЛНФМН Б awk, РЮЙ ВРН ГДЕЯЭ ТСМЙЖХЪ assert РПЕАСЕР ЖЕОНВЕВМСЧ БЕПЯХЧ ОПНБЕПЪЕЛНЦН СЯКНБХЪ.

# assert --- ОНДРБЕПДХРЭ ВРН СЯКНБХЕ БШОНКМЕМН. хМЮВЕ exit.
# Arnold Robbins, arnold@gnu.org, Public Domain
# May, 1993
function assert(condition, string) -
if (! condition) -
printf("%s:%d: assertion failed: %s"n",
FILENAME, FNR, string) ? "/dev/stderr" .assert.exit = 1 exit 1 "" ""
END -
if (.assert.exit)
exit 1 ""

тСМЙЖХЪ assert ОПНБЕПЪЕР ОЮПЮЛЕРП condition. еЯКХ НМН ДЮЕР false, НМЮ ОЕВЮРЮЕР ЯННАЫЕМХЕ Б standard error, ХЯОНКЭГСЪ ЖЕОНВЙС string ДКЪ НОХЯЮМХЪ НЬХАЙХ. гЮРЕЛ СЯРЮМЮБКХБЮЕР ОЕПЕЛЕММСЧ .assert.exit Б ЕДХМХЖС Х БШОНКМЪЕР НОЕПЮРНП exit, ЙНРНПШИ ОЕПЕДЮЕР СОПЮБКЕМХЕ Б ОПЮБХКН END. еЯКХ ОПЮБХКЮ END МЮУНДЪР, ВРН .assert.exit ЕЯРЭ true, ОПНХЯУНДХР МЕЛЕДКЕММШИ БШУНД.

мЮГМЮВЕМХЕ ОПЮБХКЮ END Я РЕЯРНЛ --- СДЕПФЮРЭ НР БШОНКМЕМХЪ БЯЪЙХЕ ДПСЦХЕ END. йНЦДЮ assertion БШДЮЕР false, ОПНЦПЮЛЛЮ ДНКФМЮ МЕЛЕДКЕММН ГЮЙЮМВХБЮРЭЯЪ. еЯКХ МХ НДХМ assertion МЕ БШДЮЕР fflse, РН .assert.exit НЯРЮЕРЯЪ ЯН ГМЮВЕМХЕЛ false, ЙНЦДЮ ОПЮБХКН END БШОНКМЪЕРЯЪ МНПЛЮКЭМН Х НЯРЮРНЙ ОПНЦПЮЛЛМШУ ОПЮБХК END АСДЕР БШОНКМЕМ. вРНАШ БЯЕ ЩРН ПЮАНРЮКН ОПЮБХКЭМН, `assert.awk' ДНКФЕМ АШРЭ ОЕПБШЛ БУНДМШЛ ТЮИКНЛ, ОПНВРЕММШЛ awk.

бШ ДНКФМШ ХЯОНКЭГНБЮРЭ ЩРС ТСМЙЖХЧ Б ЯБНХУ ОПНЦПЮЛЛЮУ ЯКЕДСЧЫХЛ НАПЮГНЛ:

function myfunc(a, b) -
assert(a != 5 && b ?= 17, "a != 5 && b ?= 17") ... ""

еЯКХ  assertion ОНРЕПОХР МЕСДЮВС, БШ ОНКСВХРЕ ЯННАЫЕМХЕ:

mydata:1357: assertion failed: a != 5 && b ?= 17

оПНАКЕЛЮ Я ЩРНИ БЕПЯХЕИ assert Б РНЛ, ВРН НМЮ ЛНФЕР МЕ ЯПЮАНРЮРЭ ЯН ЯРЮМДЮПРМШЛ awk. оПЮБХКН END ЮБРНЛЮРХВЕЯЙХ ДНАЮБКЪЕРЯЪ Й ОПНЦПЮЛЛЕ, БШГШБЮЧЫЕИ assert. нАШВМН, ЕЯКХ ОПНЦПЮЛЛЮ ЯНЯРНХР РНКЭЙН ХГ ОПЮБХКЮ BEGIN, РН БУНДМШЕ ТЮИКШ Х/ХКХ ЯРЮМДЮПРМШИ ББНД МЕ ВХРЮЧРЯЪ. нДМЮЙН РЕОЕПЭ, ЙНЦДЮ ОПНЦПЮЛЛЮ ХЛЕЕР ОПЮБХКН END, awk АСДЕР ОШРЮРЭЯЪ ОПНВЕЯРЭ БУНДМШЕ ТЮИКШ Я ДЮММШЛХ ХКХ ЯРЮМДЮПРМШИ ББНД (ЯЛ. ПЮГДЕК 8.1.5.1 [яРЮПРНБШЕ Х ГЮБЕПЬЮЧЫХЕ ДЕИЯРБХЪ], ЯРП. 100), НВЕМЭ БЕПНЪРМН, ВРН ОПНЦПЮЛЛЮ ГЮБХЯМЕР, НФХДЮЪ ББНДЮ.

15.4 нЙПСЦКЕМХЕ ВХЯЕК

б МЮВЮКН ЯРПЮМХЖШ

яОНЯНА НЙПСЦКЕМХЪ Б printf Х sprintf (ЯЛ. ПЮГДЕК 6.5 [сОНРПЕАКЕМХЕ НОЕПЮРНПНБ printf ДКЪ ДЕЙНПЮРХБМНИ ОЕВЮРХ], ЯРП. 64) ВЮЯРН ГЮБХЯХР НР ОНДОПНЦПЮЛЛШ sprintf ЯХЯРЕЛШ яХ. мЮ ЛМНЦХУ ЛЮЬХМЮУ sprintf НЙПСЦКЪЕР "unbiased " ("АЕЯОПХЯРПЮЯРМН"), ВРН НГМЮВЮЕР, ВРН НЙПСЦКЕМХЕ ОПХ НРАПЮЯШБЮМХХ .5' МЕ БЯЕЦДЮ ОПНХЯУНДХР Я ХГАШРЙНЛ, Б ОПНРХБНОНКНФМНЯРЭ МЮХБМНЛС НФХДЮМХЧ. оПХ АЕЯОПХЯРПЮЯРМНЛ НЙПСЦКЕМХХ `.5' НЙПСЦКЪЕРЯЪ ДН ВЕРМНЦН, Ю МЕ БЯЕЦДЮ Я ХГАШРЙНЛ, РЮЙ ВРН 1.5 НЙПСЦКЪЕРЯЪ ДН 2, Ю 4.5 ДН 4. б ПЕГСКЭРЮРЕ ЕЯКХ БШ ОНКЭГСЕРЕЯЭ ТНПЛЮРНЛ АЕГ НЙПСЦКЕМХЪ (МЮОПХЛЕП, "%.0f"), БШ ДНКФМШ ОПНБЕПЪРЭ, ВРН ДЕКЮЕР БЮЬЮ ЯХЯРЕЛЮ. яКЕДСЧЫЮЪ ТСМЙЖХЪ НЙПСЦКЪЕР РПЮДХЖХНММН; НМЮ ЛНФЕР НЙЮГЮРЭЯЪ ОНКЕГМНИ, ЕЯКХ БЮЬЮ awk printf НЙПСЦКЪЕР АЕЯОПХЯРПЮЯРМН.

# round --- ДЕКЮРЭ МНПЛЮКЭМНЕ НЙПСЦКЕМХЕ
# # Arnold Robbins, arnold@gnu.org, August, 1996
# Public Domain
function round(x, ival, aval, fraction) -
ival = int(x) # ЖЕКЮЪ ВЮЯРЭ, int() СЯЕЙЮЕР
# ОПНБЕПЙЮ МЮКХВХЪ ДПНАМНИ ВЮЯРХ
if (ival == x) # МЕР ДПНАМНИ ВЮЯРХ
return x
if (x ! 0) -
aval = -x # ЮАЯНКЧРМНЕ ГМЮВЕМХЕ ival = int(aval) ДПНАМНЕ = aval - ival
if (fraction ?= .5) return int(x) - 1 # -2.5 --? -3
else return int(x) # -2.3 --? -2 ""
else - fraction = x - ival if (fraction ?= .5)
return ival + 1 else
return ival "" ""
# ДКЪ ОПНБЕПЙХ - print $0, round($0) ""

15.5 оЕПЕБНД ЯХЛБНКНБ Б ВХЯКНБНИ ЙНД

б МЮВЮКН ЯРПЮМХЖШ

нДМЮ ХГ ЙНЛЛЕПВЕЯЙХУ ПЕЮКХГЮЖХИ awk ХЛЕЕР БЯРПНЕММСЧ ТСМЙЖХЧ ord, ЙНРНПЮЪ ОНКСВЮЕР ЯХЛБНК Х БНГБПЮЫЮЕР ВХЯКЕММНЕ ГМЮВЕМХЕ ЩРНЦН ЯХЛБНКЮ Б ЛЮЬХММНЛ ЛМНФЕЯРБЕ ЯХЛБНКНБ. еЯКХ ЖЕОНВЙЮ, ОЕПЕДЮММЮЪ ord, ЯНДЕПФХР АНКЕЕ НДМНЦН ЯХЛБНКЮ, ХЯОНКЭГСЕРЯЪ РНКЭЙН ОЕПБШИ ХГ МХУ.

нАПЮРМЮЪ ТСМЙЖХЪ ЕЯРЭ chr (ЮМЮКНЦХВМЮ ТСМЙЖХХ Я РЕЛ ФЕ ХЛЕМЕЛ Б оЮЯЙЮКЕ), ЙНРНПЮЪ ОНКСВЮЕР ВХЯКН Х БНГБПЮЫЮЕР ЯХЛБНК. нАЕ ТСМЙЖХХ ЛНЦСР АШРЭ ОПНЯРН МЮОХЯЮМШ Б awk; МЕР ЯСЫЕЯРБЕММШУ ОПХВХМ ДКЪ БЯРПЮХБЮМХЪ ХУ Б ХМРЕПОПЕРЮРНП.

# ord.awk --- ДЕКЮЕР ord Х chr # # ЦКНАЮКЭМШЛХ ХДЕМРХТХЙЮРНПЮЛХ:
# .ord.: ВХЯКЕММНЕ ГМЮВЕМХЕ ЯХЛБНКЮ
# .ord.init: ТСМЙЖХЪ ХМХЖХЮКХГЮЖХХ .ord.
# # Arnold Robbins # arnold@gnu.org # Public Domain # 16 January, 1992
# 20 July, 1992, revised

BEGIN - .ord.init() "" function .ord.init( low, high, i, t) -
low = sprintf("%c", 7) # BEL ЕЯРЭ ascii 7 ЕЯКХ  (low == ""a")
- # regular ascii
low = 0 high = 127 "" else if (sprintf("%c", 128 + 7) == ""a") -
# ascii, НРЛЕРЙЮ ВЕРМНЯРХ  low = 128 high = 255 "" else - # ebcdic(!)
low = 0 high = 255 ""
for (i = low; i != high; i++) -
t = sprintf("%c", i) .ord.[t] = i "" ""

яКЕДСЕР ДЮРЭ МЕЙНРНПШЕ НАЗЪЯМЕМХЪ Н ВХЯКЮУ, ХЯОНКЭГСЕЛШУ Б chr. мЮХАНКЕЕ ХГБЕЯРМНЕ ЯЕИВЮЯ ЛМНФЕЯРБН ЯХЛБНКНБ ЕЯРЭ ASCII. уНРЪ БНЯЭЛХАХРНБШИ АЮИР ЛНФЕР ХЛЕРЭ 256 ПЮГКХВМШУ ГМЮВЕМХИ (НР МСКЪ ДН 255), ASCII НОПЕДЕКЪЕР РНКЭЙН ЯХЛБНКШ ЯН ГМЮВЕМХЪЛХ НР 0 ДН 127. *2* оН ЙПЮИМЕИ ЛЕПЕ НДХМ ХГЦНРНБХРЕКЭ ЙНЛОЭЧРЕПНБ, ЙНРНПНЦН ЛШ ГМЮЕЛ, ХЯОНКЭГСЕР ASCII Я НРЛЕВЕММНИ ВЕРМНЯРЭЧ, НГМЮВЮЧЫЕИ, ВРН ЯЮЛШИ КЕБШИ АХР Б АЮИРЕ ХЛЕЕР БЯЕЦДЮ ГМЮВЕМХЕ 1. щРН ГМЮВХР, ВРН МЮ РЮЙХУ ЯХЯРЕЛЮУ


2 ASCII ХЯОНКЭГСЕРЯЪ БН ЛМНЦХУ ЯРПЮМЮУ ДКЪ ОПЕДЯРЮБКЕМХЪ Б ГМЮВЕМХЪУ НР 128 ДН 255 ЯОЕЖХЮКЭМШУ ЯХЛБНКНБ ЩРНИ ЯРПЮМШ. еЯКХ БЮЬЮ ЯХЯРЕЛЮ ХЯОНКЭГСЕР РЮЙНЕ ПЮЯЬХПЕМХЕ, БШ ЛНФЕРЕ СОПНЯРХРЭ .ord.init ДН ОПНЯРНЦН ЖХЙКЮ НР 0 ДН 255.

ЯХЛБНКШ ХЛЕЧР ВХЯКЕММНЕ ГМЮВЕМХЕ НР 128 to 255. мЮЙНМЕЖ, АНКЭЬХЕ СМХБЕПЯЮКЭМШЕ ЯХЯРЕЛШ ХЯОНКЭГСЧР ЯХЯРЕЛС ЯХЛБНКНБ EBCDIC, ЙНРНПЮЪ ХЯОНКЭГСЕР БЯЕ 256 ГМЮВЕМХИ. уНРЪ МЮ МЕЙНРНПШУ ЯРЮПШУ ЯХЯРЕЛЮУ ХЯОНКЭГСЧРЯЪ ДПСЦХЕ ЛМНФЕЯРБЮ ЯХЛБНКНБ, Н МХУ МЕ ЯРНХР ЦНБНПХРЭ.

function ord(str, c) -
# ХМРЕПЕЯ ОПЕДЯРЮБКЪЕР РНКЭЙН ОЕПБШИ ЯХЛБНК
c = substr(str, 1, 1) return .ord.[c] ""

function chr(c) -
# ОПЕБПЮЫЮИРЕ Я Б ВХЯКН ДНАЮБКЕМХЕЛ 0
return sprintf("%c", c + 0) ""

#### test code #### # BEGIN " # - # for (;;) - # printf("enter a character: ")
 # if (getline var != 0) # break # printf("ord(%s) = %d"n", var, ord(var)) # ""
# ""

нВЕБХДМШЛ СЯНБЕПЬЕМЯРБНБЮМХЕЛ ДКЪ ЩРХУ ТСМЙЖХИ АШКН АШ ОЕПЕМЕЯРХ ЙНД ТСМЙЖХХ .ord.init Б РЕКН ОПЮБХКЮ BEGIN. щРН Х АШКН РЮЙ МЮОХЯЮМН ОЕПБНМЮВЮКЭМН ДКЪ НАКЕЦВЕМХЪ ПЮГПЮАНРЙХ. хЛЕЕРЯЪ Х "РЕЯРНБЮЪ ОПНЦПЮЛЛЮ" Б ОПЮБХКЕ BEGIN ДКЪ ОПНБЕПЙХ ТСМЙЖХХ. нМЮ ОПЕБПЮЫЕМЮ Б ЙНЛЛЕМРЮПХИ ДКЪ СБЕКХВЕМХЪ ОПНХГБНДХРЕКЭМНЯРХ.

15.6 яНЕДХМЕМХЕ ЙНЛОНМЕМР ЛЮЯЯХБЮ Б ЖЕОНВЙС

б МЮВЮКН ЯРПЮМХЖШ

оПХ НАПЮАНРЙЕ ЖЕОНВЕЙ ВЮЯРН НЙЮГШБЮЕРЯЪ СДНАМШЛ ЯНЕДХМХРЭ БЯЕ ЖЕОНВЙХ Б ЛЮЯЯХБЕ Б НДМС ДКХММСЧ ЖЕОНВЙС. яКЕДСЧЫЮЪ ТСМЙЖХЪ, join , БШОНКМЪЕР ЩРС ГЮДЮВС. нМЮ ХЯОНКЭГСЕРЯЪ ДЮКЕЕ Б МЕЯЙНКЭЙХУ ОПХЙКЮДМШУ ОПНЦПЮЛЛЮУ (ЯЛ. ЦКЮБС 16 [оПЮЙРХВЕЯЙХЕ awk-ОПНЦПЮЛЛШ], ЯРП. 205).

бЮФМН УНПНЬН ЯОКЮМХПНБЮРЭ ЩРС ТСМЙЖХЧ; НМЮ ДНКФМЮ АШРЭ НАЫЕИ, МН ДНКФМЮ РЮЙФЕ ХЛЕРЭ ПЮГСЛМНЕ ОНБЕДЕМХЕ ОН СЛНКВЮМХЧ. нМЮ БШГШБЮЕРЯЪ Я ЛЮЯЯХБНЛ Х МЮВЮКЭМШЛ Х ЙНМЕВМШЛ ХМДЕЙЯЮЛХ ДКЪ НАЗЕДХМЪЕЛШУ ЩКЕЛЕМРНБ ЛЮЯЯХБЮ. рЕЛ ЯЮЛШЛ ОПЕДОНКЮЦЮЕРЯЪ, ВРН ХМДЕЙЯШ ЪБКЪЧРЯЪ ВХЯКЮЛХ -- ПЮГСЛМНЕ ОПЕДОНКНФЕМХЕ, ОНЯЙНКЭЙС ЛЮЯЯХБ, БЕПНЪРМН, ЯНГДЮБЮКЯЪ Я split (ЯЛ. ПЮГДЕК 12.3 [бЯРПНЕММШЕ ТСМЙЖХХ ДКЪ ДЕИЯРБХИ Я ЖЕОНВЙЮЛХ], ЯРП. 137).

# join.awk --- ЯНЕДХМХРЭ ЛЮЯЯХБ Б ЖЕОНВЙС
# Arnold Robbins, arnold@gnu.org, Public Domain # May 1993
function join(array, start, end, sep, result, i) -
if (sep == "")
sep = " " else if (sep == SUBSEP) # ЛЮЦХВЕЯЙНЕ ГМЮВЕМХЕ
sep = "" result = array[start] for (i = start + 1; i != end; i++)
result = result sep array[i] return result ""

мЕНАЪГЮРЕКЭМШИ ДНОНКМХРЕКЭМШИ ЮПЦСЛЕМР ЕЯРЭ ЯЕОЮПЮРНП ДКЪ ХЯОНКЭГНБЮМХЪ ОПХ ЯНЕДХМЕМХХ ЖЕОНВЕЙ Б НДМС ЖЕОНВЙС. еЯКХ Б БШГНБЕ СЙЮГЮМН МЕОСЯРНЕ ГМЮВЕМХЕ, РН join ХЯОНКЭГСЕР ЕЦН. еЯКХ РЮЙНБНЦН МЕР, НМ ЯВХРЮЕРЯЪ ОСЯРШЛ. б РЮЙНЛ ЯКСВЮЕ join ХЯОНКЭГСЕР НДХМ ОПНАЕК ЙЮЙ ЯЕОЮПЮРНП ОН СЛНКВЮМХЧ. еЯКХ СЙЮГЮММНЕ ГМЮВЕМХЕ ПЮБМН SUBSEP, РН join ЯНЕДХМЪЕР ЖЕОНВЙХ АЕГ ЯЕОЮПЮРНПНБ ЛЕФДС МХЛХ. SUBSEP ЯКСФХР ЙЮЙ "ЛЮЦХВЕЯЙНЕ" ГМЮВЕМХЕ ДКЪ СЙЮГЮМХЪ РНЦН, ВРН МЕ ДНКФМН АШРЭ МХЙЮЙХУ ЯЕОЮПЮРНПНБ ЛЕФДС ЖЕОНВЙЮЛХ-ЙНЛОНМЕМРЮЛХ. аШКН АШ НВЕМЭ УНПНЬН, ЕЯКХ АШ awk ХЛЕК НОЕПЮРНП ОПХЯБЮХБЮМХЪ ДКЪ ЙНМЙЮРЕМЮЖХХ. нРЯСРЯРБХЕ ЪБМНЦН НОЕПЮРНПЮ ДКЪ ЙНМЙЮРЕМЮЖХХ ДЕКЮЕР НОЕПЮЖХХ МЮД ЖЕОНВЙЮЛХ АНКЕЕ РПСДМШЛХ, ВЕЛ НМХ ДНКФМШ АШРЭ МЮ ЯЮЛНЛ ДЕКЕ.

15.7 оПЕБПЮЫЕМХЪ ДЮР Б НРЛЕРЙХ БПЕЛЕМХ

б МЮВЮКН ЯРПЮМХЖШ

тСМЙЖХЪ systime, БЯРПНЕММЮЪ Б gawk, БНГБПЮЫЮЕР РЕЙСЫЕЕ БПЕЛЪ ДМЪ ЙЮЙ НРЛЕРЙС БПЕЛЕМХ Б ЯЕЙСМДЮУ НР МЮВЮКЮ БЕЙЮ. щРЮ НРЛЕРЙЮ ЛНФЕР АШРЭ ОПЕБПЮЫЕМЮ Б ОПХЦНДМСЧ ДКЪ ОЕВЮРХ ДЮРС Б НДМНЛ ХГ ЛМНФЕЯРБЮ ТНПЛЮРНБ Я ОНЛНЫЭЧ БЯРПНЕММНИ ТСМЙЖХХ strftime. (оНДПНАМНЯРХ Н systime Х strftime ЯЛ. Б ПЮГДЕКЕ 12.5 [тСМЙЖХХ ДКЪ ДЕИЯРБХИ Я НРЛЕРЙЮЛХ БПЕЛЕМХ], ЯРП. 148.)

хМРЕПЕЯМСЧ Х РПСДМСЧ ОПНАКЕЛС ОПЕДЯРЮБКЪЕР ОПЕБПЮЫЕМХЕ ВХРЮЕЛНЦН ОПЕДЯРЮБКЕМХЪ НАПЮРМН Б НРЛЕРЙС БПЕЛЕМХ. аХАКХНРЕЙЮ ANSI CХ ХЛЕЕР ТСМЙЖХЧ mktime, ЙНРНПЮЪ ДЕКЮЕР НЯМНБМСЧ ПЮАНРС ОПЕБПЮЫЕМХЪ ЙЮМНМХВЕЯЙНЦН ОПЕДЯРЮБКЕМХЪ ДЮРШ Б НРЛЕРЙС БПЕЛЕМХ. я ОЕПБНЦН БГЦКЪДЮ ЛНФЕР ОНЙЮГЮРЭЯЪ, ВРН gawk ДНКФМЮ ХЛЕРЭ БЯРПНЕММСЧ ТСМЙЖХЧ mktime, ЙНРНПЮЪ ЙНОХПСЕР БЕПЯХЧ ЪГШЙЮ яХ.

оПХБЕДЕЛ БЕПЯХЧ mktime ДКЪ awk. нМЮ АЕПЕР ОПНЯРНЕ ОПЕДЯРЮБКЕМХЕ ДЮРШ Х БПЕЛЕМХ Х ЯБНПЮВХБЮЕР ХУ Б ЛЕРЙС БПЕЛЕМХ. йНД, ОПЕДЯРЮБКЕММШИ ГДЕЯЭ, ОЕПЕЛЕЬЮМ Я ЯКНБЕЯМШЛХ ОНЪЯМЕМХЪЛХ. б ПЮГДЕКЕ 16.2.7 [хГБКЕВЕМХЕ ОПНЦПЮЛЛ ХГ ТЮИКНБ Texinfo Source], ЯРП. 238, БШ СБХДХРЕ, ЙЮЙ ДНКФЕМ НАПЮАЮРШБЮРЭЯЪ ТЮИК Texinfo source ЩРНИ ЙМХЦХ ДКЪ ХГБКЕВЕМХЪ ЙНДЮ Б НРДЕКЭМШИ ХЯУНДМШИ ТЮИК.

оПНЦПЮЛЛЮ МЮВХМЮЕРЯЪ Я НОХЯШБЮЧЫЕЦН ЙНЛЛЕМРЮПХЪ Х ОПЮБХКЮ BEGIN, ЙНРНПНЕ ХМХЖХЮКХГХПСЕР РЮАКХЖС .tm.months. щРЮ РЮАКХЖЮ ЕЯРЭ ДБСЛЕПМШИ ЛЮЯЯХБ, ЯНДЕПФЮЫХИ ДКХМШ ЛЕЯЪЖЕБ. оЕПБШИ ХМДЕЙЯ ЕЯРЭ 0 ДКЪ ПЕЦСКЪПМШУ ЦНДНБ Х 1 ДКЪ БХЯНЙНЯМШУ. гМЮВЕМХЪ ДКХМ НДХМЮЙНБШ ДКЪ ЦНДНБ НАНХУ РХОНБ, ГЮ ХЯЙКЧВЕМХЕЛ тЕБПЮКЪ; ОНЩРНЛС МСФМН ХЯОНКЭГНБЮРЭ ЙПЮРМНЕ ОПХЯБЮХБЮМХЕ.

# mktime.awk --- ОПЕНАПЮГСЕР ЙЮМНМХВЕЯЙНЕ ОПЕДЯРЮБКЕМХЕ ДЮРШ
# Б НРЛЕРЙС БПЕЛЕМХ# Arnold Robbins, arnold@gnu.org, Public Domain # May 1993
BEGIN " -
# хМХЖХЮКХГЮЖХЪ РЮАКХЖШ ДКХМ ЛЕЯЪЖЕБ
.tm.months[0,1] = .tm.months[1,1] = 31 .tm.months[0,2] = 28;
.tm.months[1,2] = 29 .tm.months[0,3] = .tm.months[1,3] = 31
.tm.months[0,4] = .tm.months[1,4] = 30 .tm.months[0,5] = .tm.months[1,5] = 31
.tm.months[0,6] = .tm.months[1,6] = 30 .tm.months[0,7] = .tm.months[1,7] = 31
.tm.months[0,8] = .tm.months[1,8] = 31 .tm.months[0,9] = .tm.months[1,9] = 30
.tm.months[0,10] = .tm.months[1,10] = 31
.tm.months[0,11] = .tm.months[1,11] = 30
.tm.months[0,12] = .tm.months[1,12] = 31 ""

оНКЭГЮ НР ЯЛЕЬХБЮМХЪ ЙПЮРМШУ ОПЮБХК BEGIN (ЯЛ. ПЮГДЕК 8.1.5 [яОЕЖХЮКЭМШЕ НАПЮГЖШ BEGIN and END], ЯРП. 100) НЯНАЕММН НВЕБХДМЮ ОПХ МЮОХЯЮМХХ АХАКХНРЕВМШУ ТЮИКНБ. тСМЙЖХХ Б АХАКХНРЕВМШУ ТЮИКЮУ ОПЮБХКЭМН ХМХЖХЮКХГХПСЧР ХУ ВЮЯРМШЕ ДЮММШЕ Х РЮЙФЕ НАЕЯОЕВХБЮЧР ГЮБЕПЬЮЧЫХЕ ДЕИЯРБХЪ Б ВЮЯРМШУ ОПЮБХКЮУ END.

яКЕДСЧЫЮЪ ОПНЯРЮЪ ТСМЙЖХЪ БШВХЯКЪЕР, ЪБКЪЕРЯЪ ХКХ МЕР ДЮММШИ ЦНД БХЯНЙНЯМШЛ. еЯКХ ЦНД РНВМН ДЕКХРЯЪ МЮ 4, МН МЕ ДЕКХРЯЪ МЮ 100 ХКХ ЕЯКХ НМ РНВМН ДЕКХРЯЪ МЮ 400, РН ЩРН БХЯНЙНЯМШИ ЦНД, 1900 МЕ АШК, Ю 2000 АСДЕР БХЯНЙНЯМШЛ.

# НОПЕДЕКЪЕР БХЯНЙНЯМНЯРЭ ЦНДЮ
function .tm.isleap(year, ret) -
ret = (year % 4 == 0 && year % 100 != 0) ----
(year % 400 == 0)
return ret ""

щРЮ ТСМЙЖХЪ ХЯОНКЭГСЕРЯЪ РНКЭЙН МЕЯЙНКЭЙН ПЮГ Б ЩРНЛ ТЮИКЕ, Х НОЕПЮРНПШ, БУНДЪЫХЕ Б МЕЕ, ЛНЦКХ АШ АШРЭ БШОХЯЮМШ Б ЙЮФДНИ РНВЙЕ, ЦДЕ НМЮ ХЯОНКЭГСЕРЯЪ. бШДЕКЕМХЕ ЕЕ Б НРДЕКЭМСЧ ТСМЙЖХЧ НАКЕЦВЮЕР МЮЯРНЪЫЕЕ ХГКНФЕМХЕ Х РЮЙФЕ ОНЛНЦЮЕР ХГАЕФЮРЭ НЬХАЙХ МЮАНПЮ ОПХ ОНБРНПЕМХХ ЙНДЮ Б МЕЯЙНКЭЙХУ ЛЕЯРЮУ.

яКЕДСЧЫЮЪ ТСМЙЖХЪ АНКЕЕ ХМРЕПЕЯМЮ. нМЮ ДЕКЮЕР АНКЭЬСЧ ВЮЯРЭ ПЮАНРШ timestamp, ЙНРНПЮЪ ОПЕБПЮЫЮЕР ДЮРС Х БПЕЛЪ Б ВХЯКН ЯЕЙСМД Я МЮВЮКЮ БЕЙЮ. бШГНБ ОЕПЕДЮЕР ЛЮЯЯХБ, (МЕ НВЕМЭ СДЮВМН МЮГБЮММШИ a), ЯНДЕПФЮЫХИ 6 ГМЮВЕМХИ: ЦНД ЯН ЯРНКЕРХЪЛХ, ЛЕЯЪЖ ЙЮЙ ВХЯКН ЛЕФДС 1 Х 12, ДЕМЭ ЛЕЯЪЖЮ, ВЮЯ ЙЮЙ ВХЯКН ЛЕФДС 0 Х 23, ЛХМСРШ Б ВЮЯЕ Х ЯЕЙСМДШ Б ОПЕДЕКЮУ НДМНИ ЛХМСРШ.

тСМЙЖХЪ ХЯОНКЭГСЕР МЕЯЙНКЭЙН КНЙЮКЭМШУ ОЕПЕЛЕММШУ ДКЪ ОПЕДБШВХЯКЕМХЪ ЙНКХВЕЯРБЮ ЯЕЙСМД Б ВЮЯЕ, ЯЕЙСМД Б ДМЕ Х ЯЕЙСМД Б ЦНДС. вЮЯРН Б ОНДНАМШУ яХ-ЙНДЮУ ОПНЯРН ОХЬСР БШПЮФЕМХЪ ДПСЦ ГЮ ДПСЦНЛ, НФХДЮЪ, ВРН ЙНЛОХКЪРНП ГЮЛЕМХР ХУ ЙНМЯРЮМРЮЛХ. мЮОПХЛЕП, АНКЭЬХМЯРБН яХ-ЙНЛОХКЪРНПНБ ОПЕБПЮРЪР `60 * 60' Б `3600' БН БПЕЛЪ ЙНЛОХКЪЖХХ БЛЕЯРН ОЕПЕ БШВХЯКЕМХЪ ХУ ЙЮФДШИ ПЮГ ОПХ БШОНКМЕМХХ ОПНЦПЮЛЛШ. оПЕДБШВХЯКЕМХЕ ЩРХУ ГМЮВЕМХИ ДЕКЮЕР ТСМЙЖХЧ АНКЕЕ ЩТТЕЙРХБМНИ.

# ОЕПЕБЕЯРХ ДЮРС Б ЯЕЙСМДШ
function .tm.addup(a, total, yearsecs, daysecs,
hoursecs, i, j) -
hoursecs = 60 * 60 daysecs = 24 * hoursecs yearsecs = 365 * daysecs
total = (a[1] - 1970) * yearsecs
# КХЬМХИ ДЕМЭ ДКЪ БХЯНЙНЯМШУ ЦНДНБ for (i = 1970; i ! a[1]; i++)
if (.tm.isleap(i))
total += daysecs
j = .tm.isleap(a[1]) for (i = 1; i ! a[2]; i++)
total += .tm.months[j, i] * daysecs
total += (a[3] - 1) * daysecs total += a[4] * hoursecs
total += a[5] * 60 total += a[6]
return total ""

тСМЙЖХЪ ЯМЮВЮКЮ МЮУНДХР ОПХАКХФЕММНЕ ГМЮВЕМХЕ ВХЯКЮ ЯЕЙСМД ЛЕФДС ОНКМНВЭЧ 1 ъМБЮПЪ 1970 ЦНДЮ *3* Х МЮВЮКНЛ РЕЙСЫЕЦН ЦНДЮ. гЮРЕЛ ОПНЯЛЮРПХБЮЕР ЩРХ ЦНДШ Х ДКЪ ЙЮФДНЦН БХЯНЙНЯМНЦН ЦНДЮ ДНАЮБКЪЕР ДМЕБМСЧ ОНПЖХЧ ЯЕЙСМД. оЕПЕЛЕММЮЪ j ЕЯРЭ 0 ХКХ 1 , ЕЯКХ РЕЙСЫХИ ЦНД ЯННРБЕРЯРБЕММН БХЯНЙНЯМШИ ХКХ МЕР. дКЪ ЙЮФДНЦН ЛЕЯЪЖЮ Б РЕЙСЫЕЛ ЦНДС (ДН РЕЙСЫЕЦН ЛЕЯЪЖЮ) ДНАЮБКЪЕРЯЪ ВХЯКН ЯЕЙСМД Б ЛЕЯЪЖЕ Я ОНЛНЫЭЧ ЯННРБЕРЯРБСЧЫЕЦН ЩКЕЛЕМРЮ Б ЛЮЯЯХБЕ .tm.months. мЮЙНМЕЖ, ДНАЮБКЪЕРЯЪ Б ЯЕЙСМДЮУ ЙНКХВЕЯРБН ДМЕИ ДН РЕЙСЫЕЦН ДМЪ Х ВЮЯШ, ЛХМСРШ Х ЯЕЙСМДШ РЕЙСЫЕЦН ДМЪ. б ПЕГСКЭРЮРЕ ОНКСВЮЕЛ ЙНКХВЕЯРБН ЯЕЙСМД, ХЯРЕЙЬХУ Я 1 ЪМБЮПЪ 1970 ЦНДЮ. щРН ГМЮВЕМХЕ --- ЕЫЕ МЕ РН, ВРН МСФМН. нОХЬЕЛ ЙНПНРЙН, ОНВЕЛС.

цКЮБМЮЪ ТСМЙЖХЪ mktime АЕПЕР НДХМ ЮПЦСЛЕМР --- ЖЕОНВЙС ЯХЛБНКНБ. щРЮ ЖЕОНВЙЮ ОПЕДЯРЮБКЪЕР ДЮРС Х БПЕЛЪ Б "ЙЮМНМХВЕЯЙНИ" ТНПЛЕ. нМЮ ДНКФМЮ АШРЭ "ЦНД ЛЕЯЪЖ ДЕМЭ ВЮЯ ЛХМСРШ ЯЕЙСМДШ".

 
# mktime --- ОПЕБПЮЫЕМХЕ ДЮРШ Б ЯЕЙСМДШ,
# ЙНЛОЕМЯЮЖХЪ МЮ ВЮЯНБНИ ОНЪЯ
function mktime(str, res1, res2, a, b, i, j, t, diff) -
i = split(str, a, " ") # МЕ ОНКЮЦЮИРЕЯЭ МЮ  FS
if (i != 6)
return -1
# ОПЕБПЮЫЕМХЕ Б ВХЯКН
for (j in a) a[j] += 0

3 щРН МЮВЮКН БЕЙЮ Б ЯХЯРЕЛЮУ POSIX systems. нМН ЛНФЕР АШРЭ ДПСЦХЛ Б ДПСЦХУ ЯХЯРЕЛЮУ.
# ОПНБЕПЙЮ
if (a[1] ! 1970 ---- a[2] ! 1 ---- a[2] ? 12 ---- a[3] ! 1 ---- a[3] ? 31
---- a[4] ! 0 ---- a[4] ? 23 ---- a[5] ! 0 ---- a[5] ? 59 ---- a[6] ! 0
---- a[6] ? 60 )
return -1
res1 = .tm.addup(a) t = strftime("%Y %m %d %H %M %S", res1)
if (.tm.debug)
printf("(%s) -? (%s)"n", str, t) ? "/dev/stderr"
split(t, b, " ") res2 = .tm.addup(b)
diff = res1 - res2 if (.tm.debug)
printf("diff = %d seconds"n", diff) ? "/dev/stderr"
res1 += diff return res1 ""

тСМЙЖХЪ ЯМЮВЮКЮ ПЮГДЕКЪЕР ЖЕОНВЙС Б ЛЮЯЯХБ, ХЯОНКЭГСЪ ОПНАЕКШ Х tab Б ЙЮВЕЯРБЕ ЯЕОЮПЮРНПНБ. еЯКХ Б ЛЮЯЯХБЕ НЙЮГШБЮЧРЯЪ МЕ 6 ЩКЕЛЕМРНБ, НМЮ БНГБПЮЫЮЕР НЬХАЙС, СЙЮГЮММСЧ ЙЮЙ ГМЮВЕМХЕ \Gamma 1. гЮРЕЛ ОПЕБПЮЫЮЕР ЙЮФДШИ ЩКЕЛЕМР ЛЮЯЯХБЮ Б ВХЯКН, ДНАЮБКЪЪ Й МХЛ 0. яКЕДСЧЫХИ НОЕПЮРНП `if' ОПНБЕПЪЕР, МЮУНДХРЯЪ КХ ЙЮФДШИ ЩКЕЛЕМР Б ДНОСЯРХЛШУ ЦПЮМХЖЮУ. (щРЮ ОПНБЕПЙЮ ЛНФЕР АШРЭ ПЮЯЬХПЕМЮ, МЮОПХЛЕП, ОПНБЕПЙНИ РНЦН, ВРН ДЕМЭ ЛЕЯЪЖЮ ЯННРБЕРЯРБСЕР ПЮГЛЕПЮЛ СЙЮГЮММНЦН ЛЕЯЪЖЮ.) бЯЕ ЩРН ОН ЯСЫЕЯРБС ОПЕДЯРЮБКЪЕР ОПЕДБЮПХРЕКЭМСЧ ОНДЦНРНБЙС Х ОПНБЕПЙС МЮ НЬХАЙХ.

бЯОНЛМХЛ, ВРН .tm.addup ДЮЕР БПЕЛЪ Б ЯЕЙСМДЮУ Я ОНКМНВХ 1 ъМБЮПЪ 1970 ЦНДЮ. щРЮ БЕКХВХМЮ МЕ ОПЕДЯРЮБКЪЕР МЕОНЯПЕДЯРБЕММН ФЕКЮЕЛШИ ПЕГСКЭРЮР, ОНЯЙНКЭЙС БШВХЯКЕМХЕ МЕ ОПХМХЛЮКН Б ПЮЯВЕР ВЮЯНБНИ ОНЪЯ. дПСЦХЛХ ЯКНБЮЛХ, ОНКСВЕММНЕ ГМЮВЕМХЕ ОПЕДЯРЮБКЪЕР БПЕЛЪ Б ЯЕЙСМДЮУ, ОПНЬЕДЬЕЕ Я МЮВЮКЮ БЕЙЮ, МН РНКЭЙН ДКЪ UTC (сМХБЕПЯЮКЭМНЦН ЙННПДХМХПНБЮММНЦН БПЕЛЕМХ). еЯКХ ЛЕЯРМШИ ВЮЯНБНИ ОНЪЯ КЕФХР Й БНЯРНЙС ХКХ ГЮОЮДС НР UTC, РН МЕЙНРНПНЕ ЙНКХВЕЯРБН ВЮЯНБ ДНКФМН АШРЭ ДНАЮБКЕМН ХКХ БШВРЕМН ХГ ОНКСВЕММНИ НРЛЕРЙХ БПЕЛЕМХ.

мЮОПХЛЕП, 6:23 p.m. Б юРКЮМРЕ, Georgia (USA), МНПЛЮКЭМН МЮ 5 ВЮЯНБ ГЮОЮДМЕЕ (ОНГФЕ) UTC. щРН РНКЭЙН МЮ 4 ВЮЯЮ ОНГФЕ UTC, ЕЯКХ ББЕДЕМН ДЕЙПЕРМНЕ БПЕЛЪ. еЯКХ БШ БШГШБЮЕРЕ mktime Б юРКЮМРЕ Я ЮПЦСЛЕМРНЛ "1993 5 23 18 23 12", ПЕГСКЭРЮР НР .tm.addup АСДЕР БШДЮМ ДКЪ 6:23 p.m. UTC, ВРН ЯННРБЕРЯРБСЕР РНКЭЙН 2:23 p.m. Б юРКЮМРЕ. мЕНАУНДХЛН ДНАЮБХРЭ ЕЫЕ 4 ВЮЯЮ Б ЯЕЙСМДЮУ ДКЪ ОПЮБХКЭМНЦН ПЕГСКЭРЮРЮ. йЮЙ mktime ЛНФЕР НОПЕДЕКХРЭ ЯБНЕ НРКХВХЕ НР UTC? щРН МЮ СДХБКЕМХЕ КЕЦЙН. бШДЮММЮЪ НРЛЕРЙЮ БПЕЛЕМХ ОПЕДЯРЮБКЪЕР БПЕЛЪ, ОЕПЕДЮММНЕ Б mktime ЙЮЙ UTC. щРЮ НРЛЕРЙЮ ДНКФМЮ АШРЭ ОЕПЕДЮМЮ НОЪРЭ Б strftime, ЙНРНПЮЪ ОПЕБПЮРХР ЕЕ Б ЛЕЯРМНЕ БПЕЛЪ; РН ЕЯРЭ, ЙЮЙ АСДРН ПЮГМХЖЮ Я UTC СФЕ ДНАЮБКЕМЮ Й МЕИ. щРН ДЕКЮЕРЯЪ ОНЯПЕДЯРБНЛ ОЕПЕДЮВХ "%Y %m %d %H %M %S" Б strftime Б ЙЮВЕЯРБЕ ЮПЦСЛЕМРЮ format. нМЮ БНГБПЮРХР НРЛЕРС БПЕЛЕМХ Б ХЯУНДМНЛ ЯРПНВМНЛ ТНПЛЮРЕ. пЕГСКЭРЮР ОПЕДЯРЮБКЪЕР БПЕЛЪ, ЙНРНПНЕ СВХРШБЮЕР ПЮГМНЯРЭ Я UTC. йНЦДЮ МНБНЕ БПЕЛЪ АСДЕР НОЪРЭ ОПЕБПЮЫЕМН Б НРЛЕРЙС БПЕЛЕМХ, ПЮГМНЯРЭ ЛЕФДС ДБСЛЪ НРЛЕРЙЮЛХ АСДЕР ПЮГМНЯРЭЧ (Б ЯЕЙСМДЮУ) ЛЕФДС ЛЕЯРМШЛ БПЕЛЕМЕЛ Х UTC. щРЮ ПЮГМНЯРЭ ДНАЮБКЪЕРЯЪ Й ОНКСВЕММНЛС ПЮМЕЕ ПЕГСКЭРЮРС. дЕЛНМЯРПХПСЧЫХИ ЩРН ОПХЛЕП ОПХБЕДЕМ МХФЕ.

мЮЙНМЕЖ, ХЛЕЕРЯЪ  "ЦКЮБМЮЪ" ОПНЦПЮЛЛЮ ДКЪ ОПНБЕПЙХ ТСМЙЖХХ:

BEGIN -
if (.tm.test) -
printf "Enter date as yyyy mm dd hh mm ss: " getline .tm.test.date
t = mktime(.tm.test.date) r = strftime("%Y %m %d %H %M %S", t) printf
"Got back (%s)"n", r "" ""

бЯЪ ОПНЦПЮЛЛЮ ХЯОНКЭГСЕР ДБЕ ОЕПЕЛЕММШУ, ЙНРНПШЕ ЛНЦСР АШРЭ ГЮДЮМШ ХГ ЙНЛЮМДМНИ ЯРПНЙХ, ДКЪ СОПЮБКЕМХЪ НРКЮДНВМШЛ БШУНДНЛ Х ГЮОСЯЙЮ РЕЯРЮ Б ЙНМЕВМНЛ ОПЮБХКЕ BEGIN. бНР ПЕГСКЭРЮР ОПНОСЯЙЮ РЕЯРЮ. (гЮЛЕРХЛ, ВРН НРКЮДНВМШИ БШУНД ХДЕР ЙЮЙ ЯРЮМДЮПРМЮЪ НЬХАЙЮ, Ю БШУНД РЕЯРЮ МЮОПЮБКЕМ Б ЯРЮМДЮПРМШИ БШУНД).

$ gawk -f mktime.awk -v .tm.test=1 -v .tm.debug=1
a Enter date as yyyy mm dd hh mm ss: 1993 5 23 15 35 10
error (1993 5 23 15 35 10) -? (1993 05 23 11 35 10)
error diff = 14400 seconds
a Got back (1993 05 23 15 35 10)

бБЕДЕММНЕ БПЕЛЪ ЯНЯРЮБКЪКН 3:35 p.m. (15:35 ОН 24-ВЮЯНБШЛ ВЮЯЮЛ), 23 лЮЪ 1993 ЦНДЮ. оЕПБЮЪ ЯРПНЙЮ НРКЮДНВМНЦН БШУНДЮ ОНЙЮГШБЮЕР ПЕГСКЭРЮР ЙЮЙ БПЕЛЪ UTC-- МЮ ВЕРШПЕ ВЮЯЮ ОЕПЕД КНЙЮКЭМШЛ ВЮЯНБШЛ ОНЪЯНЛ. бРНПЮЪ ЯРПНЙЮ ОНЙЮГШБЮЕР, ВРН ПЮГМНЯРЭ ЯНЯРЮБКЪЕР 14400 ЯЕЙСМД, Р.Е. ВЕРШПЕ ВЮЯЮ. (пЮГМНЯРЭ РНКЭЙН ВЕРШПЕ ВЮЯЮ, ОНЯЙНКЭЙС Б лЮЕ ДЕИЯРБСЕР ДЕЙПЕРМНЕ БПЕЛЪ.) оНЯКЕДМЪЪ ЯРПНЙЮ БШУНДЮ РЕЯРЮ ОНЙЮГШБЮЕР, ВРН ЮКЦНПХТЛ ЙНЛОЕМЯЮЖХХ МЮ ВЮЯНБНИ ОНЪЯ ПЮАНРЮЕР; БНГБПЮЫЕММНЕ БПЕЛЪ ЯНБОЮДЮЕР Я ББЕДЕММШЛ.

щРЮ ОПНЦПЮЛЛЮ МЕ ПЕЬЮЕР НАЫСЧ ОПНАКЕЛС ОПЕНАПЮГНБЮМХЪ ОПНХГБНКЭМНЦН ОПЕДЯРЮБКЕМХЪ ДЮРШ Б НРЛЕРЙС БПЕЛЕМХ. щРЮ ОПНАКЕЛЮ НВЕМЭ ГЮОСРЮММЮЪ. нДМЮЙН ТСМЙЖХЪ mktime ДЮЕР ТСМДЮЛЕМР ДКЪ ЕЕ ПЕЬЕМХЪ. дПСЦХЕ ОПНЦПЮЛЛШ ДНКФМШ ГЮЛЕМЪРЭ ХЛЕМЮ ЛЕЯЪЖЕБ ВХЯКЮЛХ Х БПЕЛЪ AM/PM Б 24-ВЮЯНБШЕ ДЮММШЕ ДКЪ ЦЕМЕПХПНБЮМХЪ ЙЮМНМХВЕЯЙНЦН ТНПЛЮРЮ, РПЕАСЕЛНЦН mktime.

15.8 оПЕДЯРЮБКЕМХЕ РЕЙСЫЕЦН БПЕЛЕМХ

б МЮВЮКН ЯРПЮМХЖШ

тСМЙЖХХ systime Х strftime, НОХЯЮММШЕ Б ПЮГДЕКЕ 12.5 [тСМЙЖХХ ДКЪ ДЕИЯРБХИ Я ЛЕРЙЮЛХ БПЕЛЕМХ], ЯРП. 148, НАЕЯОЕВХБЮЧР ЛХМХЛСЛ СЯХКХИ, МЕНАУНДХЛШУ ДКЪ ДЕИЯРБХИ Я БПЕЛЕМЕЛ Б СДНАМНИ ДКЪ ВРЕМХЪ ТНПЛЕ. уНРЪ strftime Х БЕКХЙЮ, СОПЮБКЪЧЫХЕ ТНПЛЮРШ МЕ МЕНАУНДХЛН ГЮОНЛХМЮРЭ ХКХ ОНМХЛЮРЭ ОПХ ВРЕМХХ ОПНЦПЮЛЛШ.

яКЕДСЧЫЮЪ ТСМЙЖХЪ, gettimeofday, ГЮОНКМЪЕР ДЮММШИ ОНКЭГНБЮРЕКЕЛ ЛЮЯЯХБ ОПЕД ТНПЛЮРХПНБЮММНИ БПЕЛЕММНИ ХМТНПЛЮЖХЕИ. нМЮ БНГБПЮЫЮЕР ЖЕОНВЙС Я РЕЙСЫХЛ БПЕЛЕМЕЛ Б РНЛ ФЕ ТНПЛЮРЕ ЙЮЙ Х СРХКХРШ ДЮРШ.

# gettimeofday --- БШДЮРЭ БПЕЛЪ ДМЪ Б НАШВМНЛ ТНПЛЮРЕ
# Arnold Robbins, arnold@gnu.org, Public Domain, May 1993
# # бНГБПЮЫЮЕР ЖЕОНВЙС Б ТНПЛЮРЕ БШУНДЮ  date(1)
# гЮОНКМЪЕР ЛЮЯЯХБ ЮПЦСЛЕМРНБ БПЕЛЕМХ ХМДХБХДСЮКЭМШЛХ ГМЮВЕМХЪЛХ:
# time["second"] -- ЯЕЙСМДШ (0 - 59) # time["minute"] -- ЛХМСРШ (0 - 59)
# time["hour"] -- ВЮЯШ (0 - 23) # time["althour"] -- ВЮЯШ (0 - 12)
# time["monthday"] -- ДЕМЭ ЛЕЯЪЖЮ (1 - 31)
# time["month"] -- ЛЕЯЪЖ ЦНДЮ (1 - 12)
# time["monthname"] -- ХЛЪ ЛЕЯЪЖЮ
# time["shortmonth"] -- ЯНЙПЮЫЕММНЕ ХЛЪ ЛЕЯЪЖЮ
# time["year"] -- ЦНД Б ОПЕДЕКЮУ БЕЙЮ (0 - 99)
# time["fullyear"] -- ЦНД ЯН ЯРНКЕРХЪЛХ (19xx or 20xx)
# time["weekday"] -- ДЕМЭ МЕДЕКХ (бНЯЙПЕЯЕМЭЕ = 0)
# time["altweekday"] -- ДЕМЭ МЕДЕКХ (оНМЕДЕКЭМХЙ = 0)
# time["weeknum"] -- МНЛЕП МЕДЕКХ, БНЯЙПЕЯЕМЭЕ ОЕПБШИ ДЕМЭ
# time["altweeknum"] -- МНЛЕП МЕДЕКХ, оНМЕДЕКЭМХЙ ОЕПБШИ ДЕМЭ
# time["dayname"] -- ХЛЪ ДМЪ МЕДЕКХ
# time["shortdayname"] -- ЯНЙПЮЫЕММНЕ ХЛЪ ДМЪ МЕДЕКХ
# time["yearday"] -- ДЕМЭ Б ЦНДС (0 - 365)
# time["timezone"] -- ЯНЙПЮЫЕМХЕ ДКЪ time
function gettimeofday(time, ret, now, i) -
# БШДЮЕР БПЕЛЪ ЯПЮГС, ХГАЕЦЮЪ МЕ МЕНАУНДХЛШУ НАПЮЫЕМХИ Й ЯХЯРЕЛЕ
now = systime()
# БНГБПЮЫЮЕР БШБНД РХОЮ  date(1)
ret = strftime("%a %b %d %H:%M:%S %Z %Y", now)
# ВХЯРЙЮ БШУНДМНЦН ЛЮЯЯХБЮ
for (i in time) delete time[i]
# гЮОНКМЕМХЕ ЕЦН ГМЮВЕМХЪЛХ,  ВХЯКНБШЕ ЖЕОНВЙХ ОПЕБПЮЫЮЧРЯЪ Б ВХЯКЮ
# ДНАЮБКЕМХЕЛ  0
time["second"] = strftime("%S", now) + 0
time["minute"] = strftime("%M", now) + 0
time["hour"] = strftime("%H", now) + 0
time["althour"] = strftime("%I", now) + 0
time["monthday"] = strftime("%d", now) + 0
time["month"] = strftime("%m", now) + 0
time["monthname"] = strftime("%B", now)
time["shortmonth"] = strftime("%b", now)
time["year"] = strftime("%y", now) + 0
time["fullyear"] = strftime("%Y", now) + 0
time["weekday"] = strftime("%w", now) + 0
time["altweekday"] = strftime("%u", now) + 0
time["dayname"] = strftime("%A", now)
time["shortdayname"] = strftime("%a", now)
time["yearday"] = strftime("%j", now) + 0
time["timezone"] = strftime("%Z", now)
time["ampm"] = strftime("%p", now)
time["weeknum"] = strftime("%U", now) + 0
time["altweeknum"] = strftime("%W", now) + 0
return ret ""

жЕОНВЙХ-ХМДЕЙЯШ КЕЦВЕ ХЯОНКЭГНБЮРЭ Х ВХРЮРЭ, ВЕЛ ПЮГКХВМШЕ ТНПЛЮРШ, РПЕАСЕЛШЕ ДКЪ strftime. оПНЦПЮЛЛЮ alarm, ОПЕДЯРЮБКЕММЮЪ Б ПЮГДЕКЕ 16.2.2 [оПНЦПЮЛЛЮ-АСДХКЭМХЙ], ЯРП.228, ХЯОНКЭГСЕР ЩРС ТСМЙЖХЧ.

тСМЙЖХЪ gettimeofday, ОПЕДЯРЮБКЕМЮ БШЬЕ Б РНИ ТНПЛЕ Б ЙЮЙНИ АШКЮ МЮОХЯЮМЮ. аНКЕЕ НАЫЮЪ ТНПЛЮ ЩРНИ ТСМЙЖХХ ДНКФМЮ ЯМЮАФЮРЭ ОНКЭГНБЮРЕКЪ ОН БШАНПС НРЛЕРЙНИ БПЕЛЕМХ, ЙНРНПЮЪ ЛНЦКЮ АШ ХЯОНКЭГНБЮРЭЯЪ БЛЕЯРН РЕЙСЫЕЦН БПЕЛЕМХ.

15.9 нРЛЕРЙЮ ЦПЮМХЖ ТЮИКНБ Я ДЮММШЛХ

б МЮВЮКН ЯРПЮМХЖШ

оПЮБХКЮ ХГ BEGIN Х END ЙЮФДНЕ БШВХЯКЪЧРЯЪ РНКЭЙН НДХМ ПЮГ, Б МЮВЮКЕ Х Б ЙНМЖЕ awk-ОПНЦПЮЛЛ (ЯЛ. ПЮГДЕК 8.1.5 [яОЕЖХЮКЭМШЕ НАПЮГЖШ BEGIN Х END], ЯРП. 100). лШ (ЮБРНПШ gawks) НДМЮФДШ БЯРПЕРХКХ ОНКЭГНБЮРЕКЪ, ЙНРНПШИ НЬХАНВМН ОНКЮЦЮК, ВРН ОПЮБХКН BEGIN ДНКФМН БШОНКМЪРЭЯЪ ОПХ МЮВЮКЕ ЙЮФДНЦН ТЮИКЮ Я ДЮММШЛХ, Ю END --- Б ЙНМЖЕ ЙЮФДНЦН ТЮИКЮ. йНЦДЮ ЕЛС НАЗЪЯМХКХ, ВРН ДЕКН НАЯРНХР МЕ РЮЙ, НО ОНОПНЯХК, ВРНАШ Б gawk ДНАЮБХКХ МНБШЕ ЯОЕЖХЮКЭМШЕ НАПЮГЖШ, МЮГШБЮЕЛШЕ BEGIN.FILE END.FILE Я ФЕКЮЕЛШЛ ХЛ ОНБЕДЕМХЕЛ. нМ ДЮФЕ ЯМЮАДХК МЮЯ ЙНДНЛ, ПЕЮКХГСЧЫХЛ ЩРХ ДЕИЯРБХЪ.

оНЯКЕ МЕЙНРНПШУ ПЮГДСЛХИ, Ъ БШЬЕК Я ЯКЕДСЧЫЕИ АХАКХНРЕВМНИ ОПНЦПЮЛЛНИ. нМЮ НПЦЮМХГСЕР БШГНБ МЮОХЯЮММШУ ОНКЭГНБЮРЕКЕЛ ТСМЙЖХИ, beginfile Х endfile, Б МЮВЮКЕ Х ЙНМЖЕ ЙЮФДНЦН ТЮИКЮ Я ДЮММШЛХ. йПНЛЕ ПЕЬЕМХЪ ОПНАКЕЛШ ОНЯПЕДЯРБНЛ РНКЭЙН ДЕБЪРХ(!) ЯРПНЙ ЙНДЮ, НМЮ ОЕПЕМНЯХЛЮ: ПЮАНРЮЕР Я КЧАНИ ПЕЮКХГЮЖХЕИ awk.

# transfile.awk # # дЮЕР ОНКЭГНБЮРЕКЧ БНГЛНФМНЯРЭ ОЕПЕМНЯЮ ХЛЕМХ ТЮИКЮ #
# оНКЭГНБЮРЕКЭ ДНКФЕМ НОПЕДЕКХРЭ ТСМЙЖХХ  beginfile() Х endfile()
#ЙЮФДЮЪ АЕПЕР ХЛЪ ТЮИКЮ ЯННРБЕРЯРБЕММН ОПХ ЯРЮПРЕ ХКХ НЙНМВЮМХХ
# # Arnold Robbins, arnold@gnu.org, January 1992 # Public Domain

FILENAME != .oldfilename " -
if (.oldfilename != "")
endfile(.oldfilename) .oldfilename = FILENAME beginfile(FILENAME) ""
END - endfile(FILENAME) ""

щРНР ТЮИК ДНКФЕМ АШРЭ ГЮЦПСФЕМ ОЕПЕД "ЦКЮБМНИ" ОПНЦПЮЛЛНИ ОНКЭГНБЮРЕКЪ, РЮЙ ВРНАШ ОПЮБХКН, ЙНРНПНЕ НМ ЯНДЕПФХР, БШВХЯКЪКНЯЭ ОЕПБШЛ. щРН ОПЮБХКН ОНКЮЦЮЕРЯЪ МЮ awk-ОЕПЕЛЕММСЧ FILENAME, ЙНРНПЮЪ ЮБРНЛЮРХВЕЯЙХ ЛЕМЪЕРЯЪ ДКЪ ЙЮФДНЦН МНБНЦН ТЮИКЮ Я ДЮММШЛХ. рЕЙСЫЕЕ ХЛЪ ТЮИКЮ ЯНУПЮМЪЕРЯЪ Б ВЮЯРМНИ ОЕПЕЛЕММНИ .oldfilename. еЯКХ FILENAME МЕ ПЮБМН .oldfilename, РН НАПЮАЮРШБЮЕРЯЪ МНБШИ ТЮИК Я ДЮММШЛХ Х МЕНАУНДХЛН БШГШБЮРЭ endfile ДКЪ ЯРЮПНЦН ТЮИКЮ. оНЯЙНКЭЙС endfile ДНКФЕМ БШГШБЮРЭЯЪ РНКЭЙН ЙНЦДЮ НАПЮАНРЙЮ ТЮИКЮ ГЮЙНМВЕМЮ, ОПНЦПЮЛЛЮ ЯМЮВЮКЮ ОПНБЕПЪЕР, ВРН .oldfilename МЕ ОСЯРЮ.

гЮРЕЛ ОПНЦПЮЛЛЮ ОПХЯБЮХБЮЕР ХЛЪ РЕЙСЫЕЦН ТЮИКЮ ОЕПЕЛЕММНИ .oldfilename Х БШГШБЮЕР beginfile ДКЪ МНБНЦН ТЮИКЮ. оНЯЙНКЭЙС, ОНДНАМН БЯЕЛ awk-ОЕПЕЛЕММШЛ, .oldfilename ХМХЖХЮКХГХПСЕРЯЪ ОСЯРНИ ЯРПНЙНИ, ЩРН ОПЮБХКН ОПЮБХКЭМН БШОНКМЪЕРЯЪ Х ДКЪ ОЕПБНЦН ТЮИКЮ Я ДЮММШЛХ. оПНЦПЮЛЛЮ РЮЙФЕ ХЛЕЕР ОПЮБХКН END ДКЪ ГЮБЕПЬЮЧЫЕИ НАПЮАНРЙХ ОНЯКЕДМЕЦН ТЮИКЮ. оНЯЙНКЭЙС ЩРН ОПЮБХКН END ОПХУНДХР ОЕПЕД БЯЕЛХ ОПЮБХКЮЛХ END Б "ЦКЮБМНИ" ОПНЦПЮЛЛЕ, ЯМЮВЮКЮ АСДЕР БШГБЮМЮ endfile. х НОЪРЭ ГМЮВЕМХЕ ЙПЮРМШУ ОПЮБХК BEGIN END ДНКФМН АШРЭ ЪЯМН.

щРЮ БЕПЯХЪ ЯРЮКЙХБЮЕРЯЪ Я РЕЛХ ФЕ РПСДМНЯРЪЛХ, ВРН Х ОЕПБЮЪ БЕПЯХЪ nextfile (ЯЛ. ПЮГДЕК 15.2 [пЕЮКХГЮЖХЪ nextfile Б БХДЕ ТСМЙЖХХ], ЯРП. 170). еЯКХ НДХМ Х РНР ФЕ ТЮИК Я ДЮММШЛХ БЯРПЕРХРЯЪ ДБЮ ПЮГЮ ОНДПЪД Б ЙНЛЮМДМНИ ЯРПНЙЕ, РН endfile Х beginfile МЕ АСДСР БШОНКМЪРЭЯЪ Б ЙНМЖЕ ОЕПБНЦН ОПНУНДЮ Х Б МЮВЮКЕ БРНПНЦН. оПНАКЕЛС ПЕЬЮЕР ЯКЕДСЧЫЮЪ БЕПЯХЪ.

# ftrans.awk --- НАПЮАЮРШБЮЕР ОЕПЕУНДШ ТЮИКНБ Я ДЮММШЛХ
# # ОНКЭГНБЮРЕКЭ НОПЕДЕКЪЕР ТСМЙЖХХ beginfile() Х endfile()
# # Arnold Robbins, arnold@gnu.org, November 1992 # Public Domain
FNR == 1 -
if (.filename. != "")endfile(.filename.)
.filename. = FILENAME beginfile(FILENAME) ""
END - endfile(.filename.) ""

б ПЮГДЕКЮУ 16.1.7 [оНДЯВЕРШ], ЯРП. 225, БШ СБХДХРЕ, ЙЮЙ ЩРХ АХАКХНРЕВМШЕ ТСМЙЖХХ ЛНЦСР ХЯОНКЭГНБЮРЭЯЪ Х ЙЮЙ ЩРН СОПНЫЮЕР МЮОХЯЮМХЕ ЦКЮБМНИ ОПНЦПЮЛЛШ.

б МЮВЮКН ЯРПЮМХЖШ

<<< нЦКЮБКЕМХЕ яРПЮМХЖШ: 15  16 >>>
цКЮБМЮЪ мНБНЯРХ пЕЦХЯРПЮЖХЪ Б ЙКЮЯЯЕ оПНЦПЮЛЛМНЕ НАЕЯОЕВЕМХЕ оЮПЮККЕКЭМШЕ БШВХЯКЕМХЪ дНЙСЛЕМРЮЖХЪ FAQ ОН ЙКЮЯЯС

HIVE: All information for read only. Please respect copyright!
Hosted by hive йца: йХЕБЯЙЮЪ ЦНПНДЯЙЮЪ АХАКХНРЕЙЮ