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

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

7. бШПЮФЕМХЪ

нЦКЮБКЕМХЕ
б МЮВЮКН ЯРПЮМХЖШ

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

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

7.1 оНЯРНЪММШЕ БШПЮФЕМХЪ

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

оПНЯРЕИЬХЛ РХОНЛ БШПЮФЕМХИ ЪБКЪЧРЯЪ ЙНМЯРЮМРШ, ЙНРНПШЕ ОНЯРНЪММН ХЛЕЧР НДМН Х РН ФЕ ГМЮВЕМХЕ. хЛЕЧРЯЪ РПХ РХОЮ ЙНМЯРЮМР: ВХЯКЕММШЕ, ЯРПНЙНБШЕ Х ЙНМЯРЮМРШ ПЕЦСКЪПМШУ БШПЮФЕМХИ.

7.1.1 вХЯКЕММШЕ Х ЯРПНЙНБШЕ ЙНМЯРЮМРШ

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

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

105        1.05e+2             1050e-1

яРПНЙНБЮЪ ЙНМЯРЮМРЮ ОПЕДЯРЮБКЪЕР ЯНАНИ ОНЯКЕДНБЮРЕКЭМНЯРЭ ЯХЛБНКНБ, ГЮЙКЧВЕММСЧ Б ДБНИМШЕ ЙЮБШВЙХ.

мЮОПХЛЕП:

"ОНОСЦЮИ" ОПЕДЯРЮБКЪЕР ЖЕОНВЙС, ГМЮВЕМХЕ ЙНРНПНИ ЕЯРЭ `ОНОСЦЮИ'. жЕОНВЙХ Б gawk ЛНЦСР ХЛЕРЭ КЧАСЧ ДКХМС Х ЛНЦСР ЯНДЕПФЮРЭ КЧАШЕ БНЯЭЛХАХРНБШЕ ЯХЛБНКШ ASCII, БЙКЧВЮЪ ASCII NUL (МСКЕБНИ ЯХЛБНКЭМШИ ЙНД). дПСЦХЕ ПЕЮКХГЮЖХХ awk ЛНЦСР ХЛЕРЭ РПСДМНЯРХ Я МЕЙНРНПШЛХ ЯХЛБНКЭМШЛХ ЙНДЮЛХ.

7.1.2 йНМЯРЮМРШ ПЕЦСКЪПМШУ БШПЮФЕМХИ

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

рЮЙЮЪ ЙНМЯРЮМРЮ (ЙНМЯРЮМРЮ regexp) ЕЯРЭ НОХЯЮМХЕ ПЕЦСКЪПМНЦН БШПЮФЕМХЪ, ГЮЙКЧВЕММНЕ Б ЯКЕЬХ, РЮЙНЕ ЙЮЙ /^beginning and end$/. аНКЭЬХМЯРБН regexp, ХЯОНКЭГСЕЛШУ Б awk-ОПНЦПЮЛЛЮУ, ЕЯРЭ ЙНМЯРЮМРШ, МН НОЕПЮРНПШ ЯННРБЕРЯРБХЪ `~' Х `!~' ЛНЦСР РЮЙФЕ НОПЕДЕКЪРЭ ЯННРБЕРЯРБХЕ БШВХЯКХЛШЛ ХКХ "ДХМЮЛХВЕЯЙХЛ" regexps (ЙНРНПШЕ ЪБКЪЧРЯЪ НАШВМШЛХ ЖЕОНВЙЮЛХ ХКХ ОЕПЕЛЕММШЛХ, ЯНДЕПФЮЫХЛХ МЕЙНРНПСЧ regexp).

бМСРПЕММЕЕ ОПЕДЯРЮБКЕМХЕ ХЯОНКЭГСЕР ВХЯКЮ Я ОКЮБЮЧЫЕИ РНВЙНИ ДБНИМНИ РНВМНЯРХ. еЯКХ БШ МЕ ГМЮЕРЕ, ВРН ЩРН РЮЙНЕ, МЕ АЕЯОНЙНИРЕЯЭ НА ЩРНЛ.

7.2 хЯОНКЭГНБЮМХЕ ЙНМЯРЮМР ПЕЦСКЪПМШУ БШПЮФЕМХИ

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

йНЦДЮ РЮЙЮЪ ЙНМЯРЮМРЮ ЯРНХР Б ОПЮБНИ ВЮЯРХ НОЕПЮРНПЮ `~' ХКХ `!~' , РН НМЮ НГМЮВЮЕР РНКЭЙН regexp ДКЪ ЯННРБЕРЯРБХЪ.

йНМЯРЮМРШ regexp (РЮЙХЕ ЙЮЙ /foo/) ЛНЦСР ХЯОНКЭГНБЮРЭЯЪ ОНДНАМН ОПНЯРШЛ БШПЮФЕМХЪЛ. йНЦДЮ ЙНМЯРЮМРЮ regexp БЯРПЕВЮЕРЯЪ ЯЮЛЮ ОН ЯЕАЕ, НМЮ ХЛЕЕР РН ФЕ ЯЮЛНЕ ГМЮВЕМХЕ ЙЮЙ ЕЯКХ АШ ОНЪБХКЮЯЭ Б НАПЮГЖЕ, Р.Е. `($0 ~ /foo/)' (d.c.) (ЯЛ. ПЮГДЕК 8.1.3 [бШПЮФЕМХЪ ЙЮЙ НАПЮГЖШ], ЯРП. 98). щРН ГМЮВХР, ВРН ДБЮ ЯКЕДСЧЫХУ НРПЕГЙЮ ЙНДНБ:

if ($0 ~ /barfly/ ---- $0 ~ /camelot/)
print "found"

Х

if (/barfly/ ---- /camelot/)
print "found"

Б РНВМНЯРХ ЩЙБХБЮКЕМРМШ.

нДМН ДНБНКЭМН ЯРПЮММНЕ ЯКЕДЯРБХЕ ЩРНЦН ОПЮБХКЮ ЯНЯРНХР Б РНЛ, ВРН ЯКЕДСЧЫЕЕ АСКЕБЯЙНЕ БШПЮФЕМХЕ ХЛЕЕР ГМЮВЕМХЕ 'ДЮ', МН ДЕКЮЕР МЕ РН, ВРН, БЕПНЪРМН, ДСЛЮЕР ОНКЭГНБЮРЕКЭ:

# note that /foo/ is on the left of the ~ if (/foo/ ~ $1) 

print "found foo"

щРНР ЙНД, "НВЕБХДМН", ОПНБЕПЪЕР $1 МЮ ЯННРБЕРЯРБХЕ regexp /foo/. мН БШПЮФЕМХЕ `/foo/ ~ $1' ТЮЙРХВЕЯЙХ НГМЮВЮЕР `($0 ~ /foo/) ~ $1'. дПСЦХЛХ ЯКНБЮЛХ, ЯМЮВЮКЮ ОПНБЕПЪЕРЯЪ ЯННРБЕРЯРБХЕ БУНДМНИ ГЮОХЯХ Х regexp /foo/. пЕГСКЭРЮР АСДЕР МНКЭ ХКХ НДХМ Б ГЮБХЯХЛНЯРХ НР СЯОЕУЮ ХКХ МЕСДЮВХ ЯННРБЕРЯРБХЪ. гЮРЕЛ ЩРНР ПЕГСКЭРЮР ЯНОНЯРЮБКЪЕРЯЪ ОЕПБНЛС ОНКЧ ГЮОХЯХ. оНЯЙНКЭЙС ЛЮКН БЕПНЪРМН, ВРН ЙРН-РН МЮ ЯЮЛНЛ ДЕКЕ УНВЕР БШОНКМХРЭ РЮЙНИ РЕЯР, gawk БШДЮЕР ОПЕДНЯРЕПЕФЕМХЕ, ЕЯКХ БХДХР Б ОПНЦПЮЛЛЕ РЮЙСЧ ЙНМЯРПСЙЖХЧ.

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

оНЯРНЪММШЕ ПЕЦСКЪПМШЕ БШПЮФЕМХЪ РЮЙФЕ ХЯОНКЭГСЧРЯЪ Б ЙЮВЕЯРБЕ ОЕПБНЦН ЮПЦСЛЕМРЮ ТСМЙЖХИ gensub, sub Х gsub, Х ЙЮЙ БРНПНИ ЮПЦСЛЕМР ТСМЙЖХИ ЯННРБЕРЯРБХЪ (ЯЛ. ПЮГДЕК 12.3 [бЯРПНЕММШЕ ТСМЙЖХХ ДКЪ ДЕИЯРБХИ Я ЖЕОНВЙЮЛХ], ЯРП. 137). яНБПЕЛЕММШЕ ПЕЮКХГЮЖХХ awk, БЙКЧВЮЪ gawk, ДНОСЯЙЮЧР Б ЙЮВЕЯРБЕ РПЕРЭЕЦН ЮПЦСЛЕМРЮ split ЙНМЯРЮМРС regexp, Б РН БПЕЛЪ ЙЮЙ МЕЙНРНПШЕ ОПЕФМХЕ ПЕЮКХГЮЖХХ МЕ ДНОСЯЙЮЧР (d.c.). щРН ЛНФЕР ОПХБЕЯРХ Й МЕДНПЮГСЛЕМХЧ, ОПХ ОНОШРЙЮУ ХЯОНКЭГНБЮРЭ ЙНМЯРЮМРШ regexp Б ЙЮВЕЯРБЕ ЮПЦСЛЕМРЮ ТСМЙЖХИ, НОПЕДЕКЕММШУ ОНКЭГНБЮРЕКЕЛ (ЯЛ. ЦКЮБС 13 [тСМЙЖХХ ОНКЭГНБЮРЕКЪ, ЯРП. 153).

мЮОПХЛЕП:


function mysub(pat, repl, str, global) -
if (global)
gsub(pat, repl, str) else
sub(pat, repl, str) return str ""
-
... text = "hi! hi yourself!" 
mysub(/hi/, "howdy", text, 1) ... ""

б ЩРНЛ ОПХЛЕПЕ ОПНЦПЮЛЛХЯР УНВЕР ОЕПЕДЮРЭ ЙНМЯРЮМРС regexp Б ОНКЭГНБЮРЕКЭЯЙСЧ ТСМЙЖХЧ mysub, ЙНРНПЮЪ Б ЯБНЧ НВЕПЕДЭ ОЕПЕДЮЯР ЕЕ ХКХ Б sub ХКХ Б gsub. нДМЮЙН, МЮ ЯЮЛНЛ ДЕКЕ ОПНХГНИДЕР ЯКЕДСЧЫЕЕ: ОЮПЮЛЕРП pat АСДЕР ЕДХМХЖЕИ ХКХ МСКЕЛ Б ГЮБХЯХЛНЯРХ НР РНЦН, ЯННРБЕРЯРБСЧР ХКХ МЕР $0 Х /hi/. оНЯЙНКЭЙС ЛЮКНБЕПНЪРМН, ВРН БШ МЮ ЯЮЛНЛ ДЕКЕ УНРХРЕ ОЕПЕДЮРЭ РЮЙХЛ ОСРЕЛ АСКЕБЯЙНЕ ГМЮВЕМХЕ, gawk БШДЮЕР ОПЕДНЯРЕПЕФЕМХЕ, ЙНЦДЮ БХДХР ЙНМЯРЮМРС regexp Б ОНГХЖХХ ЮПЦСЛЕМРЮ Б НОПЕДЕКЕММНИ ОНКЭГНБЮРЕКЕЛ ТСМЙЖХХ.

7.3 оЕПЕЛЕММШЕ

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

оЕПЕЛЕММШЕ ОПЕДЯРЮБКЪЧР ЯПЕДЯРБН ДКЪ ГЮОНЛХМЮМХЪ ГМЮВЕМХИ Б МЕЙНРНПНИ РНВЙЕ ОПНЦПЮЛЛШ ДКЪ ОНЯКЕДСЧЫЕЦН ХУ ХЯОНКЭГНБЮМХЪ Б ДПСЦНИ РНВЙЕ ОПНЦПЮЛЛШ. лНФМН ЛЮМХОСКХПНБЮРЭ ХЛХ БЯЧДС Б ОПЕДЕКЮУ РЕЙЯРЮ ОПНЦПЮЛЛШ Х ЛНФМН РЮЙФЕ ОПХЯБЮХБЮРЭ ХЛ ГМЮВЕМХЪ Б ЙНЛЮМДМНИ ЯРПНЙЕ awk.

7.3.1 хЯОНКЭГНБЮМХЕ ОЕПЕЛЕММШУ Б ОПНЦПЮЛЛЕ

оЕПЕЛЕММШЕ ОНГБНКЪЧР ДЮБЮРЭ ХЛЕМЮ ГМЮВЕМХЪЛ ДКЪ ОНГДМЕИЬЕИ ЯЯШКЙХ МЮ МХУ. лШ СФЕ БХДЕКХ ОЕПЕЛЕММШЕ БН ЛМНЦХУ ОПХЛЕПЮУ. хЛЪ ОЕПЕЛЕММНИ ДНКФМН АШРЭ ЖЕОНВЙНИ АСЙБ, ЖХТП Х ОНДВЕПЙХБЮМХИ, МН МЕ ЛНФЕР МЮВХМЮРЭЯЪ Я АСЙБШ. пЕЦХЯРП ХЛЕЕР ГМЮВЕМХЕ Б ХЛЕМЮУ ОЕПЕЛЕММШУ; a Х A НГМЮВЮЧР ПЮГМШЕ ОЕПЕЛЕММШЕ. хЛЪ ОЕПЕЛЕММНИ ЯЮЛН ОН ЯЕАЕ ЪБКЪЕРЯЪ ОПЮБХКЭМШЛ БШПЮФЕМХЕЛ; НМН ОПЕДЯРЮБКЪЕР РЕЙСЫЕЕ ГМЮВЕМХЕ ОЕПЕЛЕММНИ. мНБШЕ ГМЮВЕМХЪ ОЕПЕЛЕММШЕ ОНКСВЮЧР ОНЯПЕДЯРБНЛ НОЕПЮРНПНБ ОПХЯБЮХБЮМХЪ, ОПХПЮЫЕМХЪ Х СЛЕМЭЬЕМХЪ. яЛ. ПЮГДЕК 7.7 [оПХЯБЮХБЮЧЫХЕ БШПЮФЕМХЪ], ЯРП. 84.

мЕЙНРНПШЕ ОЕПЕЛЕММШЕ ХЛЕЧР ЯОЕЖХЮКЭМШЕ БЯРПНЕММШЕ ГМЮВЕМХЪ, МЮОПХЛЕП, ПЮГДЕКХРЕКЭ ОНКЕИ FS ХКХ ЙНКХВЕЯРБН ОНКЕИ Б РЕЙСЫЕИ БУНДМНИ ГЮОХЯХ NF. яЛ. ЦКЮБС 10 [бЯРПНЕММШЕ ОЕПЕЛЕММШЕ], ЯРП. 115, ЦДЕ ЯНДЕПФХРЯЪ ХУ ЯОХЯНЙ. щРХ БЯРПНЕММШЕ ОЕПЕЛЕММШЕ ЛНЦСР ХЯОНКЭГНБЮРЭЯЪ ХКХ ОНКСВЮРЭ ОПХЯБНЕММШЕ МНБШЕ ГМЮВЕМХЪ ОНДНАМН ДПСЦХЛ ОЕПЕЛЕММШЛ, МН ХУ ГМЮВЕМХЪ РЮЙФЕ ХЯОНКЭГСЧРЯЪ ХКХ ЮБРНЛЮРХВЕЯЙХ ЛЕМЪЧРЯЪ ХМРЕПОПЕРЮРНПНЛ awk. бЯЕ ХЛЕМЮ БЯРПНЕММШУ ОЕПЕЛЕММШУ ГЮОХЯШБЮЧРЯЪ АСЙБЮЛХ БЕПУМЕЦН ПЕЦХЯРПЮ. оЕПЕЛЕММШЕ Б awk ЛНЦСР ОНКСВЮРЭ ЙЮЙ ВХЯКЕММШЕ РЮЙ Х ЯРПНЙНБШЕ ГМЮВЕМХЪ. оН СЛНКВЮМХЧ ОЕПЕЛЕММШЕ ХМХЖХЮКХГХПСЧРЯЪ ГМЮВЕМХЪЛХ ОСЯРНИ ЖЕОНВЙХ, ЙНРНПНЕ Б ВХЯКЕММНИ ТНПЛЕ ЙНМБЕПРХПСЕРЯЪ Б МНКЭ. оНЩРНЛС МЕР МСФДШ ЪБМН ХМХЖХЮКХГХПНБЮРЭ ЙЮФДСЧ ОЕПЕЛЕММСЧ, ЙЮЙ ЩРН ДЕКЮЕРЯЪ Б яХ Х АНКЭЬХМЯРБЕ ДПСЦХУ ЪГШЙНБ.

7.3.2 оПХЯБЮХБЮМХЕ ОЕПЕЛЕММШЛ ХГ ЙНЛЮМДМНИ ЯРПНЙХ

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

лНФМН СЯРЮМНБХРЭ ГМЮВЕМХЕ КЧАНИ ОЕПЕЛЕММНИ awk БЙКЧВЕМХЕЛ ОПХЯБЮХБЮМХЪ Б ЮПЦСЛЕМРШ ЙНЛЮМДМНИ ЯРПНЙХ ОПХ ГЮОСЯЙЕ awk (ЯЛ. ПЮГДЕК 14.2 [дПСЦХЕ ЮПЦСЛЕМРШ ЙНЛЮМДМНИ ЯРПНЙХ], ЯРП. 165). рЮЙНИ ЮПЦСЛЕМР ХЛЕЕР БХД variable=text. я ЕЦН ОНЛНЫЭЧ ЛНФМН СЯРЮМНБХРЭ ГМЮВЕМХЕ ОЕПЕЛЕММНИ ХКХ ОПХ ГЮОСЯЙЕ awk ХКХ ЛЕФДС БУНДМШЛХ ТЮИКЮЛХ. еЯКХ ОЕПЕД ОПХЯБЮХБЮМХЕЛ ЯРНХР ОЮПЮЛЕРП `-v', ОНДНАМН -v variable=text, РН ОЕПЕЛЕММЮЪ СЯРЮМЮБКХБЮЕРЯЪ Я ЯЮЛНЦН МЮВЮКЮ, ДН БШОНКМЕМХЪ ОПЮБХК BEGIN. оЮПЮЛЕРП `-v' Х ЕЦН ОПХЯБЮХБЮМХЪ ДНКФМШ ОПЕДЬЕЯРБНБЮРЭ БЯЕЛ ЮПЦСЛЕМРЮЛ Я ХЛЕМЮЛХ ТЮИКНБ Х РЕЙЯРС ОПНЦПЮЛЛШ. (яЛ. ПЮГДЕК 14.1 [оЮПЮЛЕРПШ ЙНЛЮМДМНИ ЯРПНЙХ], ЯРП. 161, Н ОНДПНАМНЯРЪУ СОНРПЕАКЕМХЪ ОЮПЮЛЕРПЮ `-v'.) б ОПНРХБМНЛ ЯКСВЮЕ ОПХЯБЮХБЮМХЪ ОПНХЯУНДЪР Б ЛНЛЕМРШ, НОПЕДЕКЕММШЕ ХУ ОНГХЖХЪЛХ ЯПЕДХ ЮПЦСЛЕМРНБ БУНДМШУ ТЮИКНБ, ОНЯКЕ НАПЮАНРЙХ ОПЕДЬЕЯРБСЧЫХУ ЮПЦСЛЕМРНБ.

мЮОПХЛЕП:

awk '- print $n ""' n=4 inventory-shipped n=2 BBS-list

ОЕВЮРЮЕР ГМЮВЕМХЕ МНЛЕПЮ ОНКЪ n ДКЪ БЯЕУ БУНДМШУ ГЮОХЯЕИ. оЕПЕД ВРЕМХЕЛ ОЕПБНЦН ТЮИКЮ ЙНЛЮМДМЮЪ ЯРПНЙЮ ОПХЯБЮХБЮЕР ОЕПЕЛЕММНИ n ГМЮВЕМХЕ 4. щРН ГЮЯРЮБКЪЕР ОЕВЮРЮРЭ ВЕРБЕПРНЕ ОНКЕ Б ЯРПНЙЮУ ХГ ТЮИКЮ `inventory-shipped'. оНЯКЕ НЙНМВЮМХЪ ОЕПБНЦН ТЮИКЮ МН ОЕПЕД МЮВЮКНЛ БРНПНЦН ТЮИКЮ n ОНКСВЮЕР ГМЮВЕМХЕ ДБЮ, РЮЙ ВРН БРНПНЕ ОНКЕ ОЕВЮРЮЕРЯЪ Б ЯРПНЙЮУ ХГ `BBS-list'.

$ awk '- print $n ""' n=4 inventory-shipped n=2 BBS-list
a 15 a 24...
a 555-5553 a 555-3412...

юПЦСЛЕМРШ ЙНЛЮМДМНИ ЯРПНЙХ ЯРЮМНБЪРЯЪ ДНЯРСОМШЛХ ДКЪ ЪБМНЦН ЮМЮКХГЮ ХГ awk-ОПНЦПЮЛЛШ Б ЛЮЯЯХБЕ Я ХЛЕМЕЛ ARGV (ЯЛ. ПЮГДЕК 10.3 [хЯОНКЭГНБЮМХЕ ARGC Х ARGV], ЯРП. 120). awk НАПЮАЮРШБЮЕР ГМЮВЕМХЪ ОПХЯБЮХБЮМХИ Б ЙНЛЮМДМНИ ЯРПНЙЕ Х ДКЪ СОПЮБКЪЧЫХУ ОНЯКЕДНБЮРЕКЭМНЯРЕИ (d.c.) (ЯЛ. ПЮГДЕК 4.2 [сОПЮБКЪЧЫХЕ ОНЯКЕДНБЮРЕКЭМНЯРХ], ЯРП. 24).

7.4 оПЕНАПЮГНБЮМХЪ ЖЕОНВЕЙ Х ВХЯЕК

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

жЕОНВЙХ ОПЕНАПЮГСЧРЯЪ Б ВХЯКЮ Х ВХЯКЮ ОПЕНАПЮГСЧРЯЪ Б ЖЕОНВЙХ, ЕЯКХ ЩРНЦН РПЕАСЕР ЙНМРЕЙЯР awk-ОПНЦПЮЛЛШ. мЮОПХЛЕП, ЕЯКХ ГМЮВЕМХЕ ХКХ foo ХКХ bar Б БШПЮФЕМХХ `foo + bar' НЙЮФЕРЯЪ ЖЕОНВЙНИ, НМН ОПЕБПЮЫЮЕРЯЪ Б ВХЯКН ОЕПЕД БШОНКМЕМХЕЛ ЯКНФЕМХЪ. еЯКХ ВХЯКЕММШЕ ГМЮВЕМХЪ БЯРПЕВЮЧРЯЪ ОПХ ЙНМЙЮРЕМЮЖХХ ЖЕОНВЕЙ, НМХ ОПЕБПЮЫЮЧРЯЪ Б ЖЕОНВЙХ.

 пЮЯЯЛНРПХЛ ЯКЕДСЧЫЕЕ:

two = 2; three = 3 print (two three) + 4

щРН ОЕВЮРЮЕР ГМЮВЕМХЕ (ВХЯКЕММНЕ) 27. вХЯКЕММШЕ ГМЮВЕМХЪ ОЕПЕЛЕММШУ two Х three ОПЕБПЮЫЮЧРЯЪ Б ЖЕОНВЙХ Х ЯЖЕОКЪЧРЯЪ БЛЕЯРЕ, Ю ЖЕОНВЙЮ-ПЕГСКЭРЮР НОЪРЭ ОПЕНАПЮГСЕРЯЪ Б ВХЯКН 23, Й ЙНРНПНЛС ДНАЮБКЪЕРЯЪ 4.

еЯКХ ОН ЙЮЙНИ-РН ОПХВХМЕ МСФМН ОПХМСДХРЭ ВХЯКН ОПЕБПЮРХРЭЯЪ Б ЖЕОНВЙС, ЛНФМН ЯЖЕОХРЭ ОСЯРСЧ ЖЕОНВЙС "" Я ЩРХЛ ВХЯКНЛ. вРНАШ ОПЕБПЮРХРЭ ЖЕОНВЙС Б ВХЯКН МСФМН ОПХАЮБХРЭ МНКЭ Й ЩРНИ ЖЕОНВЙЕ.

жЕОНВЙЮ ОПЕБПЮЫЮЕРЯЪ Б ВХЯКН ОПХ ХМРЕПОПЕРЮЖХХ КЧАНЦН ВХЯКЕММНЦН ОПЕТХЙЯЮ ЙЮЙ ГЮОХЯХ ВХЯКЮ: "2.5" ОПЕБПЮЫЮЕРЯЪ Б 2.5, "1e3" ОПЕБПЮЫЮЕРЯЪ Б 1000, Ю "25fix" ОНКСВЮЕР ВХЯКЕММНЕ ГМЮВЕМХЕ 25. жЕОНВЙХ, ЙНРНПШЕ МЕКЭГЪ ХМРЕПОПЕРХПНБЮРЭ ЙЮЙ ОПЮБХКЭМШЕ ВХЯКЮ, ОПЕБПЮЫЮЧРЯЪ Б 0. рНВМШЕ ОПЮБХКЮ, ОН ЙНРНПШЛ ВХЯКЮ ОПЕБПЮЫЮЧРЯЪ Б ЖЕОНВЙХ, НОПЕДЕКЪЧРЯЪ БЯРПНЕММНИ awk-ОЕПЕЛЕММНИ CONVFMT (ЯЛ. ЦКЮБС 10 [бЯРПНЕММШЕ ОЕПЕЛЕММШЕ], ЯРП. 115).

вХЯКЮ ОПЕНАПЮГСЧРЯЪ Я ОНЛНЫЭЧ ТСМЙЖХХ sprintf (ЯЛ. ПЮГДЕК 12.3 [бЯРПНЕММШЕ ТСМЙЖХХ ДКЪ ДЕИЯРБХИ Я ЖЕОНВЙЮЛХ], ЯРП. 137) Х Я CONVFMT ЙЮЙ СЙЮГЮРЕКЕЛ ТНПЛЮРЮ. CONVFMT ОН СЛНКВЮМХЧ ХЛЕЕР ГМЮВЕМХЕ "%.6g", ЙНРНПНЕ ОЕВЮРЮЕР ВХЯКЮ ОН ЙПЮИМЕИ ЛЕПЕ Я 6 ГМЮВЮЫХЛХ ЖХТПЮЛХ. дКЪ МЕЙНРНПШУ ОПХКНФЕМХИ РПЕАСЕРЯЪ ХГЛЕМЪРЭ ЕЕ ДКЪ ОНКСВЕМХЪ АНКЭЬЕИ РНВМНЯРХ. дБНИМЮЪ РНВМНЯРЭ МЮ АНКЭЬХМЯРБЕ ЯНБПЕЛЕММШУ ЛЮЬХМ ЯННРБЕРЯРБСЕР 16 ХКХ 17 ДЕЯЪРХВМШЛ ЖХТПЮЛ. яРПЮММШЕ ПЕГСКЭРЮРШ ЛНЦСР ОНКСВХРЭЯЪ, ЕЯКХ CONVFMT ОНКСВХР ГМЮВЕМХЕ, ЙНРНПНЕ МЕ ОНЛНЦЮЕР sprintf ТНПЛЮРХПНБЮРЭ ОПЮБХКЭМН ВХЯКЮ Я ОКЮБЮЧЫЕИ РНВЙНИ. мЮОПХЛЕП, ЕЯКХ БШ НОСЯРХРЕ `%' Б ТНПЛЮРЕ, БЯЕ ВХЯКЮ АСДСР БШДЮБЮРЭЯЪ НДМНИ Х РНИ ФЕ ОНЯРНЪММНИ ЖЕОНВЙНИ. мН ЕЯКХ ВХЯКН ЖЕКНЕ, РН ПЕГСКЭРЮР ОПЕНАПЮГНБЮМХЪ АСДЕР БЯЕЦДЮ ЖЕКШЛ, МЕГЮБХЯХЛН НР ГМЮВЕМХЪ CONVFMT.

 б РЮЙНЛ ТПЮЦЛЕМРЕ ЙНДЮ:

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

b ОНКСВХР ГМЮВЕМХЕ  "12", Ю МЕ "12.00" (d.c.).

дН ББЕДЕМХЪ ЯРЮМДЮПРЮ POSIX, awk ОПЕДСЯЛЮРПХБЮКН ГМЮВЕМХЕ OFMT ДКЪ ОПЕНАПЮГНБЮМХЪ ВХЯЕК Б ЖЕОНВЙХ. OFMT ЯОЕЖХТХЖХПСЕР БШУНДМНИ ТНПЛЮР ДКЪ ОЕВЮРХ ВХЯЕК НОЕПЮРНПНЛ print. CONVFMT АШКН ББЕДЕМН ДКЪ НРДЕКЕМХЪ ЯЕЛЮМРХЙХ ОПЕНАПЮГНБЮМХЪ НР ЯЕЛЮМРХЙХ ОЕВЮРХ. х CONVFMT Х OFMT ХЛЕЧР ОН СЛНКВЮМХЧ ГМЮВЕМХЕ "%.6g". б ОНДЮБКЪЧЫЕЛ АНКЭЬХМЯРБЕ ЯКСВЮЕБ ЯРЮПШЕ awk-ОПНЦПЮЛЛШ МЕ ХГЛЕМЪР ЯБНЕЦН ОНБЕДЕМХЪ. нДМЮЙН, РЮЙНЕ ХЯОНКЭГНБЮМХЕ OFMT МСФМН ДЕПФЮРЭ Б ОЮЛЪРХ, ЕЯКХ БШ ОЕПЕМНЯХРЕ БЮЬС ОПНЦПЮЛЛС МЮ ДПСЦСЧ ПЕЮКХГЮЖХЧ awk; ЛШ ПЕЙНЛЕМДСЕЛ БЛЕЯРН ХГЛЕМЕМХЪ ОПНЦПЮЛЛШ ОЕПЕМНЯХРЭ ЯЮЛ gawk! яЛ. ПЮГДЕК 6.1 [нОЕПЮРНП print], ЯРП. 61, ДКЪ ОНКМНИ ХМТНПЛЮЖХХ НА НОЕПЮРНПЕ print.

7.5 юПХТЛЕРХВЕЯЙХЕ НОЕПЮРНПШ

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

ъГШЙ awk ХЯОНКЭГСЕР ОПХБШВМШЕ ЮПХТЛЕРХВЕЯЙХЕ НОЕПЮРНПШ ОПХ БШВХЯКЕМХХ ГМЮВЕМХИ БШПЮФЕМХИ. бЯЕ ЮПХТЛЕРХВЕЯЙХЕ НОЕПЮРНПШ ХЛЕЧР МНПЛЮКЭМШЕ ОПХНПХРЕРШ Х ДЕИЯРБСЧР ЕЯРЕЯРБЕММШЛ НАПЮГНЛ. оПХБЕДЕЛ ТЮИК `grades', ЯНДЕПФЮЫХИ ЯОХЯНЙ ЯРСДЕМВЕЯЙХУ ХЛЕМ Х ОН РПХ НЖЕМЙХ ПЕГСКЭРЮРНБ РЕЯРНБ ДКЪ ЙЮФДНЦН ЯРСДЕМРЮ:

Pat 100 97 58 Sandy 84 72 93 Chris 72 92 89

яКЕДСЧЫЮЪ ОПНЦПЮЛЛЮ ВХРЮЕР ТЮИК `grades', Х ОЕВЮРЮЕР ЯПЕДМХЕ ГМЮВЕМХЪ НЖЕМНЙ:

$ awk '- sum = $2 + $3 + $4 ; 
avg = sum / 3 ? print $1, avg ""' grades
a Pat 85
a Sandy 83
a Chris 84.3333

б ЯКЕДСЧЫЕИ РЮАКХЖЕ ОЕПЕВХЯКЪЧРЯЪ ЮПХТЛЕРХВЕЯЙХЕ НОЕПЮЖХХ Б awk, Б ОНПЪДЙЕ СЛЕМЭЬЕМХЪ ОПХНПХРЕРНБ:

- x нРПХЖЮМХЕ

+ x нДМНЛЕЯРМШИ ОКЧЯ. оПЕБПЮЫЮЧР БШПЮФЕМХЕ Б ВХЯКН.

x ^ y ХКХ x ** y бНГБЕДЕМХЕ Б ЯРЕОЕМЭ: x БНГБНДХРЯЪ Б ЯРЕОЕМЭ y.

`2 ^ 3' ХЛЕЕР ГМЮВЕМХЕ БНЯЕЛЭ. жЕОНВЙЮ `**' ЩЙБХБЮКЕМРМЮ `^'. (яРЮМДЮПР POSIX ЯНДЕПФХР РНКЭЙН `^' ДКЪ БНГБЕДЕМХЪ Б ЯРЕОЕМЭ.)

x * y сЛМНФЕМХЕ. x / y дЕКЕМХЕ. оНЯЙНКЭЙС БЯЕ ВХЯКЮ Б awk БЕЫЕЯРБЕММШЕ, РН ПЕГСКЭРЮР МЕ НЙПСЦКЪЕРЯЪ ДН ЖЕКНЦН: `3 / 4' ХЛЕЕР ГМЮВЕМХЕ 0.75.

x % y нЯРЮРНЙ. вЮЯРМНЕ НЙПСЦКЪЕРЯЪ Б ЯРНПНМС МСКЪ ДН ЖЕКНЦН, СЛМНФЮЕРЯЪ МЮ y Х ПЕГСКЭРЮР БШВХРЮЕРЯЪ ХГ x. щРЮ НОЕПЮЖХЪ ХМНЦДЮ МЮГШБЮЕРЯЪ "trunc-mod." хЛЕЕР ЛЕЯРН ЯКЕДСЧЫЕЕ РНФДЕЯРБН:

b * int(a / b) + (a % b) == a нДХМ БНГЛНФМШИ МЕФЕКЮРЕКЭМШИ ЩТТЕЙР РЮЙНЦН НОПЕДЕКЕМХЪ НЯРЮРЙЮ ЯНЯРНХР Б РНЛ, ВРН x % y НРПХЖЮРЕКЭМН, ЕЯКХ x НРПХЖЮРЕКЭМН. рЮЙ, -17 % 8 = -1 б ДПСЦХУ ПЕЮКХГЮЖХЪУ awk ГМЮЙ НЯРЮРЙЮ ЛНФЕР ГЮБХЯЕРЭ НР ЙНМЙПЕРМНИ ЛЮЬХМШ.

x + y яКНФЕМХЕ. x - y бШВХРЮМХЕ.

дКЪ СБЕКХВЕМХЪ ОЕПЕМНЯХЛНЯРХ МЕ СОНРПЕАКЪИРЕ НОЕПЮРНП `**'. нДМНЛЕЯРМШЕ ОКЧЯ Х ЛХМСЯ ХЛЕЧР НДХМЮЙНБШИ ОПХНПХРЕР, НОЕПЮРНПШ СЛМНФЕМХЪ БЯЕ ХЛЕЧР НДХМЮЙНБШИ ОПХНПХРЕР, ЯКНФЕМХЕ Х БШВХРЮМХЕ ХЛЕЧР НДХМЮЙНБШИ ОПХНПХРЕР.

7.6 йНМЙЮРЕМЮЖХЪ ЖЕОНВЕЙ

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

б ЯБНЕ БПЕЛЪ ЩРН ЙЮГЮКНЯЭ УНПНЬЕИ ХДЕЕИ (Brian Kernighan). хЛЕЕРЯЪ РНКЭЙН НДМЮ НОЕПЮЖХЪ МЮД ЖЕОНВЙЮЛХ: ЙНМЙЮРЕМЮЖХЪ. мЕР ЯОЕЖХЮКЭМНЦН НОЕПЮРНПЮ ДКЪ ЕЕ СЙЮГЮМХЪ. йНМЙЮРЕМЮЖХЪ ОПНХГБНДХРЯЪ ГЮОХЯЭЧ БШПЮФЕМХИ МЕОНЯПЕДЯРБЕММН ДПСЦ ГЮ ДПСЦНЛ.

мЮОПХЛЕП:

$ awk '- print "Field number one: " $1 ""' BBS-list
a Field number one: aardvark
a Field number one: alpo-net...

аЕГ ОПНАЕКЮ Б ЯРПНЙНБНИ ОНЯРНЪММНИ ОНЯКЕ `:', 
ЯРПНЙХ ЯНЕДХМЪРЯЪ БЛЕЯРЕ.

мЮОПХЛЕП:

$ awk '- print "Field number one:" $1 ""' BBS-list
a Field number one:aardvark
a Field number one:alpo-net...

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

file = "file" name = "name" 

print "something meaningful" ? file name

мЕНАУНДХЛН ЯДЕКЮРЭ ЯКЕДСЧЫЕЕ:

print "something meaningful" ? (file name)  

лШ ПЕЙНЛЕМДСЕЛ БЮЛ ХЯОНКЭГНБЮРЭ ЯЙНАЙХ БНЙПСЦ ЙНМЙЮРЕМЮЖХИ 
ОНВРХ БН БЯЕУ НАШВМШУ ЙНМРЕЙЯРЮУ (РЮЙХУ ЙЮЙ ОПЮБШЕ ВЮЯРХ Б `=').

7.7 бШПЮФЕМХЪ ОПХЯБЮХБЮМХЪ

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

оПХЯБЮХБЮМХЕ ЕЯРЭ БШПЮФЕМХЕ, ЙНРНПНЕ ГЮОХЯШБЮЕР МНБНЕ ГМЮВЕМХЕ Б ОЕПЕЛЕММСЧ. мЮОПХЛЕП, ОПХЯБНХЛ ГМЮВЕМХЕ НДХМ ОЕПЕЛЕММНИ z:

z = 1 оНЯКЕ БШВХЯКЕМХЪ ЩРНЦН БШПЮФЕМХЪ ОЕПЕЛЕММЮЪ z ОНКСВХР ГМЮВЕМХЕ НДХМ. яРЮПНЕ ГМЮВЕМХЕ z АСДЕР ГЮАШРН.

оПХЯБЮХБЮМХЕ ЛНФЕР РЮЙФЕ ОЕПЕДЮБЮРЭ ГМЮВЕМХЕ ЖЕОНВЙХ. мЮОПХЛЕП, ОПХЯБНХЛ ГМЮВЕМХЕ "this food is good" ОЕПЕЛЕММНИ message:

thing = "food" 
predicate = "good" 
message = "this " 
thing " is "
predicate

(щРН РЮЙФЕ ХККЧЯРПХПСЕР ЙНМЙЮРЕМЮЖХЧ ЯРПНЙ.) гМЮЙ `=' МЮГШБЮЕРЯЪ НОЕПЮРНПНЛ ОПХЯБЮХБЮМХЪ. щРН ОПНЯРЕИЬЮЪ ТНПЛЮ НОЕПЮРНПЮ, ОНРНЛС ВРН ГМЮВЕМХЕ НОЕПЮМДЮ ЯОПЮБЮ ЯНУПЮМЪЕРЯЪ МЕХГЛЕММШЛ.

аНКЭЬХМЯРБН НОЕПЮРНПНБ (ЯКНФЕМХЕ, ЙНМЙЮРЕМЮЖХЪ Х ДП.) МЕ ОПНХГБНДЪР МХЙЮЙХУ ДЕИЯРБХИ ЙПНЛЕ БШВХЯКЕМХЪ ГМЮВЕМХЪ. еЯКХ ГМЮВЕМХЕ ХЦМНПХПСЕРЯЪ, НОЕПЮРНП ЛНФМН МЕ ХЯОНКЭГНБЮРЭ. нОЕПЮРНП ОПХЯБЮХБЮМХЪ МЕ РЮЙНИ; НМ БШДЮЕР ГМЮВЕМХЕ, Х ДЮФЕ ЕЯКХ БШ ЕЦН ХЦМНПХПСЕРЕ, БЯЕ ПЮБМН ОЕПЕЛЕММЮЪ ХГЛЕМЪЕРЯЪ. лШ МЮГШБЮЕЛ ЩРН ОНАНВМШЛ ЩТТЕЙРНЛ.

кЕБШИ НОЕПЮМД ОПХЯБЮХБЮМХЪ МЕ НАЪГЮМ АШРЭ РНКЭЙН ОЕПЕЛЕММНИ (ЯЛ. ПЮГДЕК 7.3 [оЕПЕЛЕММШЕ], ЯРП. 79); НМ ЛНФЕР АШРЭ РЮЙФЕ ОНКЕЛ (ЯЛ. ПЮГДЕК 5.4 [хГЛЕМЕМХЕ ЯНДЕПФХЛНЦН ОНКЪ], ЯРП. 42) ХКХ ЩКЕЛЕМРНЛ ЛЮЯЯХБЮ (ЯЛ. ЦКЮБС 11 [лЮЯЯХБШ Б awk], ЯРП. 123). бЯЕ НМХ МЮГШБЮЧРЯЪ lvalues, ВРН ГМЮВХР, ВРН НМХ ЛНЦСР ЯРНЪРЭ Б КЕБНИ ВЮЯРХ НОЕПЮРНПЮ ОПХЯБЮХБЮМХЪ. оПЮБНЯРНПНММХИ НОЕПЮМД ЛНФЕР АШРЭ КЧАШЛ БШПЮФЕМХЕЛ; НМ БШДЮЕР МНБНЕ ГМЮВЕМХЕ, ЙНРНПНЕ ОПХЯБЮХБЮМХЕ ОЕПЕДЮЕР Б СЙЮГЮММСЧ ОЕПЕЛЕММСЧ, ОНКЕ ХКХ ЩКЕЛЕМР ЛЮЯЯХБЮ. (рЮЙХЕ ГМЮВЕМХЪ МЮГШБЮЧРЯЪ rvalues).

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

foo = 1 print foo foo = "bar" print foo

йНЦДЮ БРНПНЕ ОПХЯБЮХБЮМХЕ ДЮЕР foo ЯРПНЙНБНЕ ГМЮВЕМХЕ, РНР ТЮЙР, ВРН ОПЕФМЕЕ ГМЮВЕМХЕ АШКН ВХЯКНЛ, ГЮАШБЮЕРЯЪ. жЕОНВЙЮ, ЙНРНПЮЪ МЕ МЮВХМЮЕРЯЪ Я ЖХТПШ, ХЛЕЕР ВХЯКЕММНЕ ГМЮВЕМХЕ МСКЪ. оНЯКЕ ХЯОНКМЕМХЪ ЯКЕДСЧЫЕЦН ЙНДЮ ГМЮВЕМХЕЛ foo АСДЕР ОЪРЭ:

foo = "a string" foo = foo + 5

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

оПХЯБЮХБЮМХЕ ЕЯРЭ БШПЮФЕМХЕ, ОНЩРНЛС НМН ХЛЕЕР ГМЮВЕМХЕ, РН ФЕ ЯЮЛНЕ, ЙНРНПНЕ ОПХЯБЮХБЮЕРЯЪ. рЮЙ, `z = 1' ЙЮЙ БШПЮФЕМХЕ ХЛЕЕР ГМЮВЕМХЕ НДХМ. нДМН ХГ ЯКЕДЯРБХИ ЩРНЦН ЕЯРЭ РН, ВРН ЛНФМН ОХЯЮРЭ ЙПЮРМШЕ ОПХЯБЮХБЮМХЪ:

x = y = z = 0 ОПХЯБЮХБЮЕР ГМЮВЕМХЕ 0 БЯЕЛ РПЕЛ ОЕПЕЛЕММШЛ. нМН ДЕКЮЕР ЩРН, РЮЙ ЙЮЙ ГМЮВЕМХЕ БШПЮФЕМХЪ `z = 0', ПЮБМНЕ МСКЧ, ОЕПЕДЮЕРЯЪ Б y Х ГЮРЕЛ ГМЮВЕМХЕ `y = z = 0', ЙНРНПНЕ ЕЯРЭ МНКЭ, ОЕПЕДЮЕРЯЪ Б x.

лНФМН ХЯОНКЭГНБЮРЭ ОПХЯБЮХБЮМХЕ БЯЧДС, ЦДЕ ОНЪБКЪЕРЯЪ БШПЮФЕМХЕ. мЮОПХЛЕП, ЛНФМН МЮОХЯЮРЭ `x != (y = 1)' ВРНАШ ОПХЯБНХРЭ ОЕПЕЛЕММНИ y ЕДХМХЖС, Ю ГЮРЕЛ ОПНБЕПХРЭ, ПЮБЕМ КХ У ЕДХМХЖЕ. мН РЮЙНИ ЯРХКЭ ДЕКЮЕР ОПНЦПЮЛЛС РПСДМНИ ДКЪ ВРЕМХЪ; МХЦДЕ ЙПНЛЕ ПЮГНБШУ ОПНЦПЮЛЛ, МЕ ЯКЕДСЕР СОНРПЕАКЪРЭ РЮЙХУ МЮЦПНЛНФДЕМХИ ОПХЯБЮХБЮМХИ.

йПНЛЕ `=', ХЛЕЕРЯЪ МЕЯЙНКЭЙН ДПСЦХУ НОЕПЮРНПНБ ОПХЯБЮХБЮМХЪ, ЙНРНПШЕ БШОНКМЪЧР ЮПХТЛЕРХВЕЯЙХЕ ДЕИЯРБХЪ Я ЯРЮПШЛ ГМЮВЕМХЕЛ ОЕПЕЛЕММНИ. мЮОПХЛЕП, НОЕПЮРНП `+=' БШВХЯКЪЕР МНБНЕ ГМЮВЕМХЕ, ДНАЮБКЪЪ ОПЮБНЯРНПНММЕЕ ГМЮВЕМХЕ Й ЯРЮПНЛС ГМЮВЕМХЧ ОЕПЕЛЕММНИ. рЮЙ, ЯКЕДСЧЫЕЕ ОПХЯБЮХБЮМХЕ ДНАЮБКЪЕР ОЪРЭ Й ГМЮВЕМХЧ foo:

foo += 5

щРН ЩЙБХБЮКЕМРМН ЯКЕДСЧЫЕЛС:

foo = foo + 5

хЯОНКЭГСИРЕ РНР БЮПХЮМР, ЙНРНПШИ ДЕКЮЕР БЮЬС ОПНЦПЮЛЛС АНКЕЕ ЪЯМНИ. хЛЕЧРЯЪ ЯХРСЮЖХХ, ЙНЦДЮ СОНРПЕАКЕМХЕ `+=' (ХКХ ДПСЦНЦН НОЕПЮРНПЮ ОПХЯБЮХБЮМХЪ) ЕЯРЭ МЕ РН ФЕ ЯЮЛНЕ, ВРН ОНБРНПЕМХЕ КЕБНЦН НОЕПЮМДЮ Б БШПЮФЕМХХ ЯОПЮБЮ. МЮОПХЛЕП:

# яОЮЯХАН  Pat Rankin ГЮ ЩРНР ОПХЛЕП
BEGIN -
foo[rand()] += 5 for (x in foo)
print x, foo[x]
bar[rand()] = bar[rand()] + 5 for (x in bar)
print x, bar[x] ""

хМДЕЙЯШ ОПХ bar АСДСР ЦЮПЮМРХПНБЮММН ПЮГМШЛХ , ОНРНЛС ВРН rand АСДЕР БНГБПЮЫЮРЭ ПЮГМШЕ ГМЮВЕМХЪ ОПХ ЙЮФДНЛ БШГНБЕ. (лЮЯЯХБШ Х ТСМЙЖХЪ rand ЕЫЕ МЕ ПЮЯЯЛЮРПХБЮКХЯЭ. яЛ. ЦКЮБС 11 [лЮЯЯХБШ Б awk], ЯРП. 123, Х ЯЛ. ПЮГДЕК 2.2 [бЯРПНЕММШЕ ВХЯКНБШЕ ТСМЙЖХХ], ЯРП. 136). щРНР ОПХЛЕП ХККЧЯРПХПСЕР БЮФМШИ ТЮЙР Б НРМНЬЕМХХ НОЕПЮРНПНБ ОПХЯБЮХБЮМХЪ: РНКЭЙН БШПЮФЕМХЕ ЯКЕБЮ БШВХЯКЪЕРЯЪ НДХМ ПЮГ.

рН, Б ЙЮЙНЛ ОНПЪДЙЕ БШВХЯКЪЧРЯЪ БШПЮФЕМХЪ, КЕБНЕ Х ОПЮБНЕ, ГЮБХЯХР НР ПЕЮКХГЮЖХХ. пЮЯЯЛНРПХЛ ОПХЛЕП:

i = 1 a[i += 2] = i + 1

гМЮВЕМХЕ a[3] ЛНФЕР АШРЭ КХАН 2 КХАН 4.

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

lvalue += increment
дНАЮБКЪЕР increment Й ГМЮВЕМХЧ  lvalue ДКЪ ХГЛЕМЕМХЪ  lvalue.

lvalue -= decrement
бШВХРЮЕР  decrement ХГ ГМЮВЕМХЪ lvalue.

lvalue *= coefficient
сЛМНФЮЕР ГМЮВЕМХЕ lvalue МЮ  coefficient.

lvalue /= divisor
дЕКХР ГМЮВЕМХЕ  lvalue МЮ  divisor.

lvalue %= modulus
оПХЯБЮХБЮЕР lvalue ГМЮВЕМХЕ ЕЕ НЯРЮРЙЮ ОН modulus.

lvalue ^= power ХКХ  lvalue **= power

бНГБНДХР lvalue Б ЯРЕОЕМЭ power. (рНКЭЙН НОЕПЮРНП `^=' СЙЮГЮМ Б POSIX.) дКЪ ЛЮЙЯХЛЮКЭМНИ ОЕПЕМНЯХЛНЯРХ МЕ СОНРПЕАКЪИРЕ НОЕПЮРНП `**='.

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

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

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