пСЙНБНДЯРБН ОНКЭГНБЮРЕКЪ ДКЪ GNU Awk
13. тСМЙЖХХ, НОПЕДЕКЕММШЕ ОНКЭГНБЮРЕКЕЛ
яКНФМШЕ awk-ОПНЦПЮЛЛШ ВЮЯРН ЛНЦСР АШРЭ СОПНЫЕМШ НОПЕДЕКЕМХЕЛ БЮЬХУ ЯНАЯРБЕММШУ ТСМЙЖХИ. оНКЭГНБЮРЕКЭЯЙХЕ ТСМЙЖХХ ЛНЦСР БШГШБЮРЭЯЪ РНВМН РЮЙ ФЕ ЙЮЙ Х БЯРПНЕММШЕ (ЯЛ. ПЮГДЕК 7.13 [бШГНБШ ТСМЙЖХИ], ЯРП. 93), МН НОПЕДЕКЪРЭ ХУ БШ ДНКФМШ ЯЮЛХ --- ЯННАЫХРЭ awk, ВРН НМХ ДНКФМШ ДЕКЮРЭ. 13.1 яХМРЮЙЯХЯ НОПЕДЕКЕМХЪ ТСМЙЖХХнОПЕДЕКЕМХЪ ТСМЙЖХИ ЛНЦСР ПЮЯОНКЮЦЮРЭЯЪ ЦДЕ СЦНДМН ЛЕФДС ОПЮБХКЮЛХ ОПНЦПЮЛЛШ awk. рЮЙХЛ НАПЮГНЛ, НАЫЮЪ ТНПЛЮ ОПНЦПЮЛЛШ awk ПЮЯЬХПЪЕРЯЪ Х БЙКЧВЮЕР ОНЯКЕДНБЮРЕКЭМНЯРХ ОПЮБХК Х НОПЕДЕКЕМХИ ТСМЙЖХИ ОНКЭГНБЮРЕКЪ. мЕР МЕНАУНДХЛНЯРХ ОНЛЕЫЮРЭ НОПЕДЕКЕМХЪ ТСМЙЖХИ ОЕПЕД НАПЮЫЕМХЪЛХ Й МХЛ, РЮЙ ЙЮЙ awk ВХРЮЕР БЯЧ ОПНЦПЮЛЛС ОЕПЕД МЮВЮКНЛ ЕЕ БШОНКМЕМХЪ. нОПЕДЕКЕМХЕ ТСМЙЖХХ Я ХЛЕМЕЛ name БШЦКЪДХР РЮЙ: function name(parameter-list) - body-of-function "" name ЕЯРЭ ХЛЪ НОПЕДЕКЪЕЛНИ ТСМЙЖХХ. оПЮБХКЭМНЕ ХЛЪ ТСМЙЖХХ ОНДНАМН ОПЮБХКЭМНЛС ХЛЕМХ ОЕПЕЛЕММНИ: ОНЯКЕДНБЮРЕКЭМНЯРЭ АСЙБ, ЖХТП Х ОНДВЕПЙХБЮМХИ, МЮВХМЮЧЫЮЪЯЪ МЕ Я ЖХТПШ. б ОПЕДЕКЮУ НДМНИ awk-ОПНЦПЮЛЛШ ЙЮФДНЕ ХЛЪ ЛНФЕР АШРЭ ХЯОНКЭГНБЮМН ЙЮЙ ОЕПЕЛЕММЮЪ, ЛЮЯЯХБ ХКХ ТСМЙЖХЪ. parameter-list ЕЯРЭ ЯОХЯНЙ ЮПЦСЛЕМРНБ ТСМЙЖХХ Х КНЙЮКЭМШУ ХЛЕМ ОЕПЕЛЕММШУ, ПЮГДЕКЕММШУ ГЮОЪРШЛХ. йНЦДЮ ТСМЙЖХЪ БШГШБЮЕРЯЪ, ХЛЕМЮ ЮПЦСЛЕМРНБ ХЯОНКЭГСЧРЯЪ ДКЪ ОНЛЕЫЕМХЪ ГМЮВЕМХИ ЮПЦСЛЕМРНБ, СЙЮГЮММШУ Б БШГНБЕ. кНЙЮКЭМШЕ ОЕПЕЛЕММШЕ ХМХЖХЮКХГХПСЧРЯЪ ОСЯРШЛХ ЖЕОНВЙЮЛХ. тСМЙЖХЪ МЕ ЛНФЕР ХЛЕРЭ ДБСУ ОЮПЮЛЕРПНБ Я НДХМЮЙНБШЛХ ХЛЕМЮЛХ. рЕКН ТСМЙЖХХ ЯНЯРНХР ХГ НОЕПЮРНПНБ awk. щРН МЮХАНКЕЕ БЮФМЮЪ ВЮЯРЭ НОПЕДЕКЕМХЪ, РЮЙ ЙЮЙ НМЮ ЦНБНПХР, ВРН ТСМЙЖХЪ ДНКФМЮ ДЕКЮРЭ. хЛЕМЮ ЮПЦСЛЕМРНБ ЯСЫЕЯРБСЧР, ВРНАШ ДЮРЭ РЕКС БНГЛНФМНЯРЭ ПЮГКХВЮРЭ ЮПЦСЛЕМРШ; КНЙЮКЭМШЕ ОЕПЕЛЕММШЕ ОПЕДНЯРЮБКЪЧР РЕКС ЛЕЯРЮ ДКЪ БПЕЛЕММШУ ГМЮВЕМХИ. яХМРЮЙЯХВЕЯЙХ ХЛЕМЮ ЮПЦСЛЕМРНБ МЕНРКХВХЛШ НР ХЛЕМ КНЙЮКЭМШУ ОЕПЕЛЕММШУ; БЛЕЯРН ЩРНЦН, ЙНКХВЕЯРБН ЮПЦСЛЕМРНБ, СЙЮГЮММШУ Б БШГНБЕ ТСМЙЖХХ, НОПЕДЕКЪЕР, ЙЮЙ ЛМНЦН ХЛЕЕРЯЪ ЮПЦСЛЕМРМШУ ОЕПЕЛЕММШУ. рЮЙ, ЕЯКХ ДЮМШ РПХ ГМЮВЕМХЪ ЮПЦСЛЕМРНБ, ОЕПБШЕ РПХ ХЛЕМХ Б ЯОХЯЙЕ ОЮПЮЛЕРПНБ ЕЯРЭ ЮПЦСЛЕМРШ, Ю НЯРЮКЭМШЕ ЪБКЪЧРЯЪ КНЙЮКЭМШЛХ ОЕПЕЛЕММШЛХ. еЯКХ ЙНКХВЕЯРБН ЮПЦСЛЕМРНБ МЕ НДМН Х РНФЕ БН БЯЕУ БШГНБЮУ ТСМЙЖХХ, МЕЙНРНПШЕ ХЛЕМЮ Б ЯОХЯЙЕ ОЮПЮЛЕРПНБ ЛНЦСР АШРЭ ЮПЦСЛЕМРЮЛХ Б НДМХУ ЯКСВЮЪУ Х КНЙЮКЭМШЛХ ОЕПЕЛЕММШЛХ Б ДПСЦХУ. хМЮВЕ ЦНБНПЪ, ЛНФМН ЯВХРЮРЭ, ВРН НОСЫЕММШЕ ЮПЦСЛЕМРШ ОН СЛНКВЮМХЧ ОНКСВЮЧР ГМЮВЕМХЕ ОСЯРНИ ЖЕОНВЙХ. нАШВМН, ЙНЦДЮ БШ ОХЬХРЕ ТСМЙЖХЧ, БШ ГМЮЕРЕ, ЯЙНКЭЙН ХЛЕМ БШ МЮЛЕПЕМШ ХЯОНКЭГНБЮРЭ ДКЪ ЮПЦСЛЕМРНБ Х ЯЙНКЭЙН ДКЪ КНЙЮКЭМШУ ОЕПЕЛЕММШУ. оПХ ОПНЦПЮЛЛХПНБЮМХХ НАШВМН ОНЛЕЫЮЧР МЕЯЙНКЭЙН ДНОНКМХРЕКЭМШУ ОПНАЕКНБ ЛЕФДС ЮПЦСЛЕМРЮЛХ Х КНЙЮКЭМШЛХ ОЕПЕЛЕММШЛХ ДКЪ СЙЮГЮМХЪ РНЦН, ЙЮЙ ТСМЙЖХЪ АСДЕР ХЯОНКЭГНБЮРЭЯЪ. бН БПЕЛЪ БШОНКМЕМХЪ РЕКЮ ТСМЙЖХХ ЮПЦСЛЕМРШ Х ГМЮВЕМХЪ КНЙЮКЭМШУ ОЕПЕЛЕММШУ ОПЪВСР, ХКХ ГЮРЕМЪЧР, РЕ ФЕ ЯЮЛШЕ ХЛЕМЮ, ХЯОНКЭГНБЮММШЕ Б НЯРЮКЭМНИ ОПНЦПЮЛЛЕ. гЮРЕМЕММШЕ ОЕПЕЛЕММШЕ МЕДНЯРСОМШ ХГ НОПЕДЕКЕМХЪ ТСМЙЖХХ, ОНРНЛС ВРН МЕБНГЛНФМН НАПЮРХРЭЯЪ Й МХЛ, ОНЙЮ ХУ ХЛЕМЮ ГЮМЪРШ КНЙЮКЭМШЛХ ОЕПЕЛЕММШЛХ. бЯЕ ДПСЦХЕ ОЕПЕЛЕММШЕ, ХЯОНКЭГСЕЛШЕ Б awk-ОПНЦПЮЛЛЕ, ДНЯРСОМШ ДКЪ ЯЯШКНЙ ХКХ ОПХЯБЮХБЮМХИ ХГ РЕКЮ ТСМЙЖХХ. юПЦСЛЕМРШ Х КНЙЮКЭМШЕ ОЕПЕЛЕММШЕ ХЦПЮЧР НЯНАСЧ ПНКЭ РНКЭЙН МЮ БПЕЛЪ БШОНКМЕМХЪ РЕКЮ ТСМЙЖХХ. йЮЙ РНКЭЙН НМН НЙНМВЕМН, ЛНФМН НОЪРЭ НАПЮЫЮРЭЯЪ Й ОЕПЕЛЕММШЛ, ЙНРНПШЕ АШКХ ГЮРЕМЕМШ ОПХ БШОНКМЕМХХ РЕКЮ. рЕКН ТСМЙЖХХ ЛНФЕР ЯНДЕПФЮРЭ БШПЮФЕМХЪ, ЙНРНПШЕ БШГШБЮЧР ТСМЙЖХХ. нМХ ЛНЦСР ДЮФЕ БШГШБЮРЭ НОПЕДЕКЪЕЛСЧ ТСМЙЖХЧ, ХКХ МЕОНЯПЕДЯРБЕММН ХКХ ВЕПЕГ БШГНБ ДПСЦНИ ТСМЙЖХХ. лШ ЦНБНПХЛ Б РЮЙХУ ЯКСВЮЪУ, ВРН ТСМЙЖХЪ ПЕЙСПЯХБМЮ. бН ЛМНЦХУ ПЕЮКХГЮЖХЪУ awk, БЙКЧВЮЪ gawk, ЙКЧВЕБНЕ ЯКНБН function ЛНФЕР АШРЭ ЯНЙПЮЫЕМН ДН func. нДМЮЙН POSIX СЙЮГШБЮЕР РНКЭЙН ЯКНБН function. тЮЙРХВЕЯЙХ ЩРН ХЛЕЕР МЕЙНРНПШЕ ОПЮЙРХВЕЯЙХЕ ЯКЕДЯРБХЪ. еЯКХ gawk МЮУНДХРЯЪ Б POSIX-ЯНБЛЕЯРХЛНЛ ПЕФХЛЕ (ЯЛ. ПЮГДЕК 14.1 [оЮПЮЛЕРПШ ЙНЛЮМДМНИ ЯРПНЙХ], ЯРП. 161), РН ЯКЕДСЧЫХИ НОЕПЮРНП МЕ НОПЕДЕКЪЕР ТСМЙЖХЧ: func foo() - a = sqrt($1) ; print a ""нМ НОПЕДЕКЪЕР ОПЮБХКН, ЙНРНПНЕ ДКЪ ЙЮФДНИ ГЮОХЯХ ЯЖЕОКЪЕР ГМЮВЕМХЕ ОЕПЕЛЕММНИ `func' Я БНГБПЮЫЕММШЛ ГМЮВЕМХЕЛ ТСМЙЖХХ `foo'. еЯКХ ЖЕОНВЙЮ-ПЕГСКЭРЮР МЕ ОСЯРЮ, ДЕИЯРБХЕ БШОНКМЪЕРЯЪ. х ЩРН, ЙНМЕВМН, АСДЕР МЕ РН, ВРН ГЮДСЛЮМН. (awk ОПХМХЛЮЕР РЮЙНИ ББНД ЙЮЙ ЯХМРЮЙЯХВЕЯЙХ ОПЮБХКЭМШИ, ОНЯЙНКЭЙС ТСМЙЖХХ ЛНЦСР ХЯОНКЭГНБЮРЭЯЪ ПЮМЭЬЕ ХУ НОПЕДЕКЕМХЪ Б ОПНЦПЮЛЛЮУ.) дКЪ НАЕЯОЕВЕМХЪ ОЕПЕМНЯХЛНЯРХ ОПНЦПЮЛЛ СОНРПЕАКЪИРЕ БЯЕЦДЮ Б НОПЕДЕКЕМХЪУ ЙКЧВЕБНЕ ЯКНБН function. 13.2 оПХЛЕПШ НОПЕДЕКЕМХЪ ТСМЙЖХИбНР НОПЕДЕКЕМХЕ ОНКЭГНБЮРЕКЭЯЙНИ ТСМЙЖХХ Я ХЛЕМЕЛ myprint, ЙНРНПЮЪ АЕПЕР ВХЯКН Х ОЕВЮРЮЕР ЕЦН Б СЙЮГЮММНЛ ТНПЛЮРЕ. function myprint(num) - printf "%6.3g"n", num "" оПХБЕДЕЛ ДКЪ ХККЧЯРПЮЖХХ awk-ОПЮБХКН, ЙНРНПНЕ ХЯОНКЭГСЕР ЩРС ТСМЙЖХЧ: $3 ? 0 - myprint($3) "" щРЮ ОПНЦПЮЛЛЮ ОЕВЮРЮЕР Б ЯОЕЖХЮКЭМНЛ ТНПЛЮРЕ БЯЕ РПЕРЭХ ОНКЪ, ЙНРНПШЕ ЯНДЕПФЮР ОНКНФХРЕКЭМНЕ ВХЯКН. оНЩРНЛС, ЕЯКХ ДЮМН: 1.2 3.4 5.6 7.8 9.10 11.12 -13.14 15.16 17.18 19.20 21.22 23.24РН ЩРЮ ОПНЦПЮЛЛЮ, ХЯОНКЭГСЪ МЮЬС ТСМЙЖХЧ ДКЪ ТНПЛЮРХПНБЮМХЪ ПЕГСКЭРЮРЮ, МЮОЕВЮРЮЕР: 5.6 21.2яКЕДСЧЫЮЪ ТСМЙЖХЪ БШВЕПЙХБЮЕР БЯЕ ЩКЕЛЕМРШ ЛЮЯЯХБЮ. function delarray(a, i) - for (i in a) delete a[i] "" оПХ ПЮАНРЕ Я ЛЮЯЯХБЮЛХ ВЮЯРН МСФМН БШВЕПЙХБЮРЭ БЯЕ ЩКЕЛЕМРШ МЕЙНРНПНЦН ЛЮЯЯХБЮ Х МЮВХМЮРЭ Я МЮВЮКЮ Я МНБШЛ ЯОХЯЙНЛ ЩКЕЛЕМРНБ (ЯЛ. ПЮГДЕК 11.6 [нОЕПЮРНП delete], ЯРП. 128). бЛЕЯРН ОНБРНПЕМХЪ РЮЙНЦН ЖХЙКЮ БЯЧДС Б ОПНЦПЮЛЛЕ, everywhere ЦДЕ БШ УНРХРЕ НВХЯРХРЭ ЛЮЯЯХБ, ЛНФМН ОПНЯРН БШГШБЮРЭ delarray. оПХБЕДЕЛ ОПХЛЕП ПЕЙСПЯХБМНИ ТСМЙЖХХ. нМЮ АЕПЕР ЖЕОНВЙС Б ЙЮВЕЯРБЕ БУНДМНЦН ОЮПЮЛЕРПЮ Х БНГБПЮЫЮЕР ЖЕОНВЙС Б НАПЮРМНЛ ОНПЪДЙЕ. function rev(str, start) - if (start == 0) return "" return (substr(str, start, 1) rev(str, start - 1)) "" еЯКХ ЩРЮ ТСМЙЖХЪ МЮУНДХРЯЪ Б ТЮИКЕ Я ХЛЕМЕЛ `rev.awk', ЛШ ЛНФЕЛ ОПНБЕПХРЭ ЕЕ ЯКЕДСЧЫХЛ НАПЮГНЛ: $ echo "Don't Panic!" -- ? gawk --source '- print rev($0, length($0)) ""' -f rev.awk a !cinaP t'noD бНР ОПХЛЕП, ЦДЕ ХЯОНКЭГСЕРЯЪ БЯРПНЕММЮЪ ТСМЙЖХЪ strftime. (яЛ. ПЮГДЕК 12.5 [тСМЙЖХХ ДКЪ ДЕИЯРБХИ Я НРЛЕРЙЮЛХ БПЕЛЕМХ], ЯРП. 148, ДКЪ ОНДПНАМНИ ХМТНПЛЮЖХХ Н strftime.) тСМЙЖХЪ ctime Б яХ ОНКСВЮЕР timestamp Х БНГБПЮЫЮЕР ЕЕ Б УНПНЬН ХГБЕЯРМНИ ТНПЛЕ. гДЕЯЭ ОПХБЕДЕМЮ ЕЕ awk-БЕПЯХЪ: # ctime.awk # # awk-БЕПЯХЪ ТСМЙЖХХ ctime(3) Б яХ function ctime(ts, format) - format = "%a %b %d %H:%M:%S %Z %Y" if (ts == 0) ts = systime() # ОН СЛНКВЮМХЧ ХЯОНКЭГСЕРЯЪ РЕЙСЫЕЕ БПЕЛЪ return strftime(format, ts) "" 13.3 бШГНБ ТСМЙЖХИ, НОПЕДЕКЕММШУ ОНКЭГНБЮРЕКЕЛбШГНБ ТСМЙЖХХ ОНДПЮГСЛЕБЮЕР ГЮОСЯЙ ЕЕ РЕКЮ ДКЪ БШОНКМЕМХЪ МЕНАУНДХЛШУ ДЕИЯРБХИ. бШГНБ ТСМЙЖХХ ЕЯРЭ БШПЮФЕМХЕ, Х ЕЦН ГМЮВЕМХЕ ЕЯРЭ ГМЮВЕМХЕ, БНГБПЮЫЮЕЛНЕ ТСМЙЖХЕИ. бШГНБ ТСМЙЖХХ ЯНЯРНХР ХГ ХЛЕМХ ТСМЙЖХХ Я ОНЯКЕДСЧЫХЛХ ЮПЦСЛЕМРЮЛХ Б ЯЙНАЙЮУ. рН, ВРН БШ ОХЬХРЕ Б БШГНБЕ Б ЙЮВЕЯРБЕ ЮПЦСЛЕМРНБ, РЮЙФЕ ЕЯРЭ БШПЮФЕМХЪ awk; ЙЮФДШИ ПЮГ, ЙНЦДЮ БШОНКМЪЕРЯЪ БШГНБ, ЩРХ БШПЮФЕМХЪ БШВХЯКЪЧРЯЪ Х ХУ ГМЮВЕМХЪ ЯРЮМНБЪРЯЪ ТЮЙРХВЕЯЙХЛХ ЮПЦСЛЕМРЮЛХ. мЮОПХЛЕП, БНР БШГНБ foo Я РПЕЛЪ ЮПЦСЛЕМРЮЛХ (ОЕПБШИ ЕЯРЭ ЙНМЙЮРЕМЮЖХЪ ЖЕОНВЕЙ): foo(x y, "lose", 4 * z)бмхлюмхе: ЯХЛБНКШ whitespace (ОПНАЕКШ Х РЮАСКЪЖХХ) МЕ ДНОСЯЙЮЧРЯЪ ЛЕФДС ХЛЕМЕЛ ТСМЙЖХХ Х НРЙПШБЮЧЫЕИ ЯЙНАЙНИ ЯОХЯЙЮ ЮПЦСЛЕМРНБ. еЯКХ БШ ОН НЬХАЙЕ МЮОХЬЕРЕ ГДЕЯЭ whitespace, РН awk ЛНФЕР ОНДСЛЮРЭ, ВРН БШ УНРХРЕ ЯНЕДХМХРЭ ОЕПЕЛЕММСЧ Я БШПЮФЕМХЕЛ Б ЯЙНАЙЮУ. бЛЕЯРЕ Я РЕЛ awk ГЮЛЕВЮЕР, ВРН ХЯОНКЭГСЕРЯЪ ХЛЪ ТСМЙЖХХ, Ю МЕ ОЕПЕЛЕММНИ, Х БШДЮЕР ЯННАЫЕМХЕ НА НЬХАЙЕ. йНЦДЮ БШГШБЮЕРЯЪ ТСМЙЖХЪ, НМЮ ОНКСВЮЕР ЙНОХХ ГМЮВЕМХИ ЕЕ ЮПЦСЛЕМРНБ. щРН МЮГШБЮЕРЯЪ БШГНБ ОН ГМЮВЕМХЧ. бШГШБЮЧЫЮЪ ЯРНПНМЮ ЛНФЕР ХЯОНКЭГНБЮРЭ ОЕПЕЛЕММСЧ ЙЮЙ БШПЮФЕМХЕ ДКЪ ЮПЦСЛЕМРЮ, МН БШГШБЮЕЛЮЪ ТСМЙЖХЪ ЩРНЦН МЕ ГМЮЕР: НМЮ ГМЮЕР РНКЭЙН ГМЮВЕМХЕ ЮПЦСЛЕМРЮ. мЮОПХЛЕП, ЕЯКХ БШ МЮОХЬХРЕ РЮЙНИ ЙНД: foo = "bar" z = myfunc(foo)БШ МЕ ДНКФМШ ДСЛЮРЭ НА ЮПЦСЛЕМРЕ ДКЪ myfunc ЙЮЙ Н "ОЕПЕЛЕММНИ foo." бЛЕЯРН ЩРНЦН БШ ДНКФМШ ДСЛЮРЭ НА ЮПЦСЛЕМРЕ ЙЮЙ Н ЯРПНЙНБНЛ ГМЮВЕМХХ "bar". еЯКХ ТСМЙЖХЪ myfunc ХГЛЕМЪЕР ГМЮВЕМХЪ ЯБНХУ КНЙЮКЭМШУ ОЕПЕЛЕММШУ, ЩРН МЕ БКХЪЕР МХ МЮ ЙЮЙХЕ ДПСЦХЕ ОЕПЕЛЕММШЕ. рЮЙ, ЕЯКХ myfunc ДЕКЮЕР РЮЙ: function myfunc(str) - print str str = "zzz" print str "" ДКЪ ХГЛЕМЕМХЪ ЯБНЕЦН ОЕПБНЦН ЮПЦСЛЕМРЮ --- ОЕПЕЛЕММНИ str, ЩРН МЕ ХГЛЕМХР ГМЮВЕМХЪ foo Б ЛЕЯРЕ БШГНБЮ. пНКЭ foo ОПХ БШГНБЕ myfunc ЙНМВЮЕРЯЪ, ЙНЦДЮ БШВХЯКЪЕРЯЪ ЕЕ ГМЮВЕМХЕ "bar". еЯКХ str РЮЙФЕ ЯСЫЕЯРБСЕР БМЕ myfunc, РЕКН ТСМЙЖХХ МЕ ЛНФЕР ХГЛЕМХРЭ ЩРН БМЕЬМЕЕ ГМЮВЕМХЕ, ОНРНЛС ВРН НМН ГЮРЕМЕМН БН БПЕЛЪ БШОНКМЕМХЪ РЕКЮ myfunc Х МЕ ЛНФЕР АШРЭ СБХДЕМН ХКХ ХГЛЕМЕМН НРРСДЮ. бЛЕЯРЕ Я РЕЛ, ЙНЦДЮ ЛЮЯЯХБШ ЯКСФЮР ОЮПЮЛЕРПЮЛХ ТСМЙЖХИ, НМХ МЕ ЙНОХПСЧРЯЪ. мЮНАНПНР, НМХ ДНЯРСОМШ ДКЪ ОПЪЛШУ ЛЮМХОСКЪЖХИ ХГ РЕКЮ ТСМЙЖХХ. щРН НАШВМН МЮГШБЮЕРЯЪ БШГНБ ОН ХЛЕМХ (ХКХ ОН ЯЯШКЙЕ). хГЛЕМЕМХЪ, ЯДЕКЮММШЕ Б ОЮПЮЛЕРПЕ ЛЮЯЯХБЕ БМСРПХ РЕКЮ ТСМЙЖХХ, БХДХЛШ БМЕ ЩРНИ ТСМЙЖХХ. щРН ЛНФЕР АШРЭ НВЕМЭ НОЮЯМН, ЕЯКХ МЕ ЯКЕДХРЭ ГЮ РЕЛ, ВРН БШ ДЕКЮЕРЕ. мЮОПХЛЕП: function changeit(array, ind, nvalue) - array[ind] = nvalue "" BEGIN - a[1] = 1; a[2] = 2; a[3] = 3 changeit(a, 2, "two") printf "a[1] = %s, a[2] = %s, a[3] = %s"n", a[1], a[2], a[3] "" щРЮ ОПНЦПЮЛЛЮ ОЕВЮРЮЕР `a[1] = 1, a[2] = two, a[3] = 3', ОНРНЛС ВРН changeit ОПХЯБЮХБЮЕР "two" БРНПНЛС ЩКЕЛЕМРС ЛЮЯЯХБЮ a. мЕЙНРНПШЕ ПЕЮКХГЮЖХХ awk ОНГБНКЪЧР БШГШБЮРЭ ТСМЙЖХХ, ЙНРНПШЕ МЕ АШКХ НОПЕДЕКЕМШ, Х РНКЭЙН ЯННАЫЮЧР НА ЩРНЛ БН БПЕЛЪ ХЯОНКМЕМХЪ, ЙНЦДЮ ОПНЦПЮЛЛЮ ТЮЙРХВЕЯЙХ ОШРЮЕРЯЪ БШГБЮРЭ ТСМЙЖХЧ. мЮОПХЛЕП: BEGIN - if (0) foo() else bar() "" function bar() - ... "" # ГЮЛЕРХЛ, ВРН `foo' МЕ НОПЕДЕКЕМЮ рЮЙ ЙЮЙ НОЕПЮРНП `if' МХЙНЦДЮ МЕ АСДЕР `true', МЕНОПЕДЕКЕММНЯРЭ foo МЕ ЯНГДЮЕР ОПНАКЕЛ. уНРЪ НАШВМН ЩРН ОПНАКЕЛЮ, ЕЯКХ ОПНЦПЮЛЛЮ БШГШБЮЕР МЕНОПЕДЕКЕММСЧ ТСМЙЖХЧ. еЯКХ АШКН СЙЮГЮМН `--lint' (ЯЛ. ПЮГДЕК 14.1 [оЮПЮЛЕРПШ ЙНЛЮМДМНИ ЯРПНЙХ], ЯРП. 161), gawk ЯННАЫХР Н БШГНБЕ МЕНОПЕДЕКЕММШУ ТСМЙЖХИ. мЕЙНРНПШЕ ПЕЮКХГЮЖХХ awk ЦЕМЕПХПСЧР ДХМЮЛХВЕЯЙХЕ НЬХАЙХ, ЕЯКХ БШ ХЯОНКЭГСЕРЕ НОЕПЮРНП next (ЯЛ, ПЮГДЕК 9.7 [нОЕПЮРНП next], ЯРП. 111) БМСРПХ ТСМЙЖХХ ОНКЭГНБЮРЕКЪ. gawk МЕ ХЛЕЕР ЩРНИ ОПНАКЕЛШ. 13.4 нОЕПЮРНП returnрЕКН ТСМЙЖХХ ОНКЭГНБЮРЕКЪ ЛНФЕР ЯНДЕПФЮРЭ НОЕПЮРНП return. щРНР НОЕПЮРНП БНГБПЮЫЮЕР СОПЮБКЕМХЕ ОПНДНКФЕМХЧ awk-ОПНЦПЮЛЛШ. еЦН ЛНФМН РЮЙФЕ ХЯОНКЭГНБЮРЭ ДКЪ БНГБПЮРЮ ГМЮВЕМХЪ ТСМЙЖХХ ДКЪ ХЯОНКЭГНБЮМХЪ Б НЯРЮКЭМНИ ВЮЯРХ ОПНЦПЮЛЛШ. щРН БШЦКЪДХР РЮЙ: return [expression]. вЮЯРЭ expression МЕ НАЪГЮРЕКЭМЮ. еЯКХ НМЮ НОСЫЕМЮ, БНГБПЮЫЮЕЛНЕ ГМЮВЕМХЕ МЕ НОПЕДЕКЕМН Х, ЯКЕДНБЮРЕКЭМН, МЕОПЕДЯЙЮГСЕЛН. нОЕПЮРНП return АЕГ expression ОНДПЮГСЛЕБЮЕРЯЪ Б ЙНМЖЕ ЙЮФДНЦН НОПЕДЕКЕМХЪ ТСМЙЖХХ. рЮЙ ВРН ЕЯКХ СОПЮБКЕМХЕ ДНЯРХЦЮЕР ЙНМЖЮ РЕКЮ ТСМЙЖХХ, РН ТСМЙЖХЪ БНГБПЮЫЮЕР МЕОПЕДЯЙЮГСЕЛНЕ ГМЮВЕМХЕ. awk МЕ ОПЕДСОПЕФДЮЕР НА ХЯОНКЭГНБЮМХХ БНГБПЮЫЕММНЦН ГМЮВЕМХЪ РЮЙНИ ТСМЙЖХХ. хМНЦДЮ МСФМН МЮОХЯЮРЭ ТСМЙЖХЧ ДКЪ БШОНКМЕМХЪ НОПЕДЕКЕММШУ ДЕИЯРБХИ, Ю МЕ ДКЪ ОНКСВЕМХЪ БНГБПЮЫЮЕЛНЦН ГМЮВЕМХЪ. рЮЙЮЪ ТСМЙЖХЪ ЯННРБЕРЯРБСЕР ОСЯРНИ ТСМЙЖХХ Б яХ ХКХ ОПНЖЕДСПЕ Б оЮЯЙЮКЕ. рЮЙ, ЛНФЕР АШРЭ ЖЕКЕЯННАПЮГМШЛ МЕ БНГБПЮЫЮРЭ МХЙЮЙНЦН ГМЮВЕМХЪ; МСФМН ОПНЯРН ДЕПФЮРЭ Б СЛЕ, ВРН ЕЯКХ БШ ХЯОНКЭГСЕРЕ ГМЮВЕМХЕ РЮЙНИ ТСМЙЖХХ, БШ ХДЕРЕ МЮ ПХЯЙ. бНР ОПХЛЕП ОНКЭГНБЮРЕКЭЯЙНИ ТСМЙЖХХ, ЙНРНПЮЪ БНГБПЮЫЮЕР ГМЮВЕМХЕ МЮХАНКЭЬЕЦН ВХЯКЮ ЯПЕДХ ЩКЕЛЕМРНБ ЛЮЯЯХБЮ: function maxelt(vec, i, ret) - for (i in vec) - if (ret == "" ---- vec[i] ? ret) ret = vec[i] "" return ret "" бШ БШГШБЮЕРЕ maxelt Я НДМХЛ ЮПЦСЛЕМРНЛ, ЙНРНПШИ ЕЯРЭ ХЛЪ ЛЮЯЯХБЮ. кНЙЮКЭМШЕ ОЕПЕЛЕММШЕ i Х ret МЕ ОПЕДМЮГМЮВЕМШ АШРЭ ЮПЦСЛЕМРЮЛХ; ЕЯКХ АШ МЕ АШКН МХВЕЦН, ВРН ОПЕОЪРЯРБНБЮКН АШ БЮЛ ОЕПЕДЮРЭ ДБЮ ХКХ РПХ ЮПЦСЛЕМРЮ ТСМЙЖХХ maxelt, ПЕГСКЭРЮРШ ЛНЦКХ АШ АШРЭ ЯРПЮММШЛХ. дНОНКМХРЕКЭМШИ ОПНАЕК ОЕПЕД i Б ЯОХЯЙЕ ОЮПЮЛЕРПНБ СЙЮГШБЮЕР, ВРН i Х ret МЕ ОПЕДОНКЮЦЮЧРЯЪ АШРЭ ЮПЦСЛЕМРЮЛХ. щРН ЕЯРЭ ЯНЦКЮЬЕМХЕ, ЙНРНПНЛС БШ ДНКФМШ ЯКЕДНБЮРЭ ОПХ НОПЕДЕКЕМХХ ТСМЙЖХИ. бНР ОПНЦПЮЛЛЮ, ЙНРНПЮЪ ХЯОНКЭГСЕР МЮЬС ТСМЙЖХЧ maxelt. нМЮ ГЮОНКМЪЕР ЛЮЯЯХБ, БШГШБЮЕР maxelt Х ГЮРЕЛ БШДЮЕР ЛЮЙЯХЛЮКЭМНЕ ВХЯКН Б ЩРНЛ ЛЮЯЯХБЕ: awk ' function maxelt(vec, i, ret) - for (i in vec) - if (ret == "" ---- vec[i] ? ret) ret = vec[i] "" return ret "" # гЮЦПСГЙЮ БЯЕУ ОНКЕИ ЙЮФДНИ ГЮОХЯХ Б nums. - for(i = 1; i != NF; i++) nums[NR, i] = $i "" END - print maxelt(nums) ""' еЯКХ ГЮДЮМ ЯКЕДСЧЫХИ ББНД: 1 5 23 8 16 44 3 5 2 8 26 256 291 1396 2962 100 -6 467 998 1101 99385 11 0 225 МЮЬЮ ОПНЦПЮЛЛЮ ДНКФМЮ ЯННАЫХРЭ МЮЛ, ВРН 99385 ЕЯРЭ МЮХАНКЭЬЕЕ ВХЯКН Б ЛЮЯЯХБЕ. |
<<< | нЦКЮБКЕМХЕ | яРПЮМХЖШ: 13 14 | >>> |