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

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

12. бЯРПНЕММШЕ ТСМЙЖХХ

нЦКЮБКЕМХЕ

бЯРПНЕММШЕ ТСМЙЖХХ БЯЕЦДЮ ДНЯРСОМШ КЪ БШГНБЮ ХГ awk-ОПНЦПЮЛЛШ. щРЮ ЦКЮБЮ НОПЕДЕКЪЕР БЯЕ БЯРПНЕММШЕ ТСМЙЖХХ Б awk; МЕЙНРНПШЕ ХГ МХУ СОНЛХМЮЧРЯЪ Б ДПСЦХУ ПЮГДЕКЮУ, МН ГДЕЯЭ ДКЪ СДНАЯРБЮ ЯНАПЮМШ БЯЕ ТСМЙЖХХ. (лНФМН РЮЙФЕ ЯЮЛНЯРНЪРЕКЭМН НОПЕДЕКЪРЭ МНБШЕ ТСМЙЖХХ . яЛ. ЦКЮБС 13 [тСМЙЖХХ, НОПЕДЕКЕММШЕ ОНКЭГНБЮРЕКЕЛ], ЯРП. 153.)

12.1 бШГНБ БЯРПНЕММШУ ТСМЙЖХИ

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

вРНАШ БШГБЮРЭ БЯРПНЕММСЧ ТСМЙЖХЧ, МЮОХЬХРЕ ЕЕ ХЛЪ Х ОНЯКЕ МЕЦН ЕЕ ЮПЦСЛЕМРШ Б ЯЙНАЙЮУ. мЮОПХЛЕП, `atan2(y + z, 1)' ЕЯРЭ БШГНБ ТСМЙЖХХ atan2 Я ДБСЛЪ ЮПЦСЛЕМРЮЛХ.

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

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

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

i = 4 j = sqrt(i++)

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

мЮОПХЛЕП,

i = 5 j = atan2(i++, i *= 2)

еЯКХ ОНПЪДНЙ БШВХЯКЕМХЪ ЕЯРЭ ЯКЕБЮ МЮОПЮБН, РН i ЯМЮВЮКЮ ЯРЮМНБХРЯЪ 6, Ю ГЮРЕЛ 12, Х atan2 БШГШБЮЕРЯЪ Я ДБСЛЪ ЮПЦСЛЕМРЮЛХ 6 Х 12. ю ЕЯКХ ОНПЪДНЙ БШВХЯКЕМХЪ АСДЕР ЯОПЮБЮ МЮКЕБН, i ЯМЮВЮКЮ АСДЕР 10, Ю ОНРНЛ 11 Х atan2 АСДЕР БШГБЮМ Я ДБСЛЪ ЮПЦСЛЕМРЮЛХ 11 Х 10.

12.2 вХЯКЕММШЕ БЯРПНЕММШЕ ТСМЙЖХХ

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

оПХБЕДЕЛ ОНКМШИ ЯОХЯНЙ БЯРПНЕММШУ ТСМЙЖХИ, ПЮАНРЮЧЫХУ Я ВХЯКЮЛХ. мЕНАЪГЮРЕКЭМШЕ ОЮПЮЛЕРПШ ГЮЙКЧВЕМШ Б ЙБЮДПЮРМШЕ ЯЙНАЙХ ("[" and "]").

int(x)

бШДЮЕР АКХФЮИЬЕЕ ЖЕКНЕ Й x, ПЮЯОНКНФЕММНЕ ЛЕФДС x Х МСКЕЛ, НЙПСЦКЕММНЕ Б ЯРНПНМС МСКЪ.

мЮОПХЛЕП, int(3) ЕЯРЭ3, int(3.9) ЕЯРЭ 3, int(-3.9) ЕЯРЭ \Gamma 3, and int(-3) ЕЯРЭ РН ФЕ ЯЮЛНЕ \Gamma 3. sqrt(x)

бШДЮЕР ОНКНФХРЕКЭМШИ ЙБЮДПЮРМШИ ЙНПЕМЭ ХГ x. яННАЫЮЕР НА НЬХАЙЕ, ЕЯКХ x НРПХЖЮРЕКЕМ. рЮЙ, sqrt(4) ЕЯРЭ ДБЮ.

exp(x)

бШДЮЕР ЩЙЯОНМЕМРС НР x (e ^ x), ХКХ ЯННАЫЕМХЕ НА НЬХАЙЕ, ЕЯКХ x БШУНДХР ГЮ ДНОСЯРХЛШЕ ОПЕДЕКШ, ЙНРНПШЕ ЛНЦСР ГЮБХЯЕРЭ НР ОПЕДЯРЮБКЕМХЪ ВХЯЕК Я ОКЮБЮЧЫЕИ РНВЙНИ Б БЮЬЕИ ЛЮЬХМЕ.

log(x)

бШДЮЕР МЮРСПЮКЭМШИ КНЦЮПХТЛ x, ЕЯКХ x ОНКНФХРЕКЕМ; Б ОПНРХБМНЛ ЯКСВЮЕ ЯННАЫЮЕР НА НЬХАЙЕ.

sin(x)
бШДЮЕР ЯХМСЯ НР У, У Б ПЮДХЮМЮУ.
cos(x)
бШДЮЕР ЙНЯХМСЯ НР  x, Б ПЮДХЮМЮУ.
atan2(y, x)
бШДЮЕР ЮПЙРЮМЦЕМЯ НР  y / x Б ПЮДХЮМЮУ.
rand()

бШДЮЕР ЯКСВЮИМНЕ ВХЯКН. гМЮВЕМХЪ rand ПЮБМНЛЕПМН ПЮЯОПЕДЕКЕМШ ЛЕФДС МСКЕЛ Х ЕДХМХЖЕИ. гМЮВЕМХЕ МХЙНЦДЮ МЕ ПЮБМН МХ 0 МХ 1. хМНЦДЮ МСФМШ ЯКСВЮИМШЕ ЖЕКШЕ ВХЯКЮ. дКЪ ЩРНЦН ХЛЕЕРЯЪ ОНКЭГНБЮРЕКЭЯЙЮЪ ТСМЙЖХЪ ДКЪ ОНКСВЕМХЪ ЯКСВЮИМШУ МЕНРПХЖЮРЕКЭМШУ ЖЕКШУ ЛЕМЭЬХУ ВЕЛ n:

function randint(n) -
return int(n * rand()) ""

оПНХГБЕДЕМХЕ ДЮЕР ЯКСВЮИМШЕ ВХЯКЮ ЛЕФДС 0 Х n. гЮРЕЛ НМХ ОПЕБПЮЫЮЧРЯЪ Б ЖЕКШЕ ( Я ОНЛНЫЭЧ int) ЛЕФДС МСКЕЛ Х n \Gamma 1, БЙКЧВХРЕКЭМН. оПХБЕДЕЛ ОПХЛЕП, ЦДЕ ОНДНАМЮЪ ТСМЙЖХЪ ХЯОНКЭГСЕРЯЪ ДКЪ ОНКСВЕМХЪ ЯКСВЮИМШУ ЖЕКШУ ЛЕФДС 1 Х n. щРЮ ОПНЦПЮЛЛЮ ОЕВЮРЮЕР МНБНЕ ЯКСВЮИМНЕ ВХЯКН ДКЪ ЙЮФДНИ БУНДМНИ ГЮОХЯХ.

awk ' # тСМЙЖХЪ roll АПНЯЮЕР ЛНДЕКЭМСЧ ХЦПЮКЭМСЧ ЙНЯРЭ.
function roll(n) - return 1 + int(rand() * n) ""

# Roll 3 АПНЯЮЕР ЬЕЯРХЦПЮММСЧ ЙНЯРЭ Х
# ОЕВЮРЮЕР  НАЫЕЕ ВХЯКН РНВЕЙ. -
printf("%d points"n",
roll(6)+roll(6)+roll(6)) ""'

мхлюмхе: б АНКЭЬХМЯРБЕ ПЕЮКХГЮЖХИ awk, БЙКЧВЮЪ gawk, rand МЮВХМЮЕР ЦЕМЕПХПНБЮРЭ ВХЯКЮ Я РНЦН ФЕ МЮВЮКЭМНЦН МНЛЕПЮ ОПХ ЙЮФДНЛ ГЮОСЯЙЕ awk. рЮЙХЛ НАПЮГНЛ, ОПНЦПЮЛЛЮ АСДЕР ЦЕМЕПХПНБЮРЭ РЕ ФЕ ЯЮЛШЕ ПЕГСКЭРЮРШ ОПХ ЙЮФДНЛ ЕЕ ГЮОСЯЙЕ. вХЯКЮ ЯКСВЮИМШ Б ОПЕДЕКЮУ НДМНЦН ГЮОСЯЙЮ awk, МН ОНБРНПЪЧРЯЪ НР ГЮОСЯЙЮ Й ГЮОСЯЙС. щРН СДНАМН ОПХ НРКЮДЙЕ. мН ЕЯКХ БШ УНРХРЕ, ВРНАШ ОПНЦПЮЛЛЮ ДЮБЮКЮ ПЮГМШЕ ПЕГСКЭРЮРШ ОПХ ЙЮФДНЛ ГЮОСЯЙЕ, МСФМН ЛЕМЪРЭ МЮВЮКЭМШИ МНЛЕП Б ЙЮФДНЛ ОПНЦНМЕ. дКЪ ЩРНЦН ЛНФМН ХЯОНКЭГНБЮРЭ srand.

srand([x])

тСМЙЖХЪ СЯРЮМЮБКХБЮЕР МЮВЮКЭМШИ МНЛЕП x ДКЪ ЦЕМЕПХПСЕЛШУ ЯКСВЮИМШУ ЖЕКШУ ВХЯЕК. йЮФДНЕ РЮЙНЕ ГМЮВЕМХЕ ОПХБНДХР Й ЯБНЕИ ОНЯКЕДНБЮРЕКЭМНЯРХ ЯКСВЮИМШУ ВХЯЕК.1 рЮЙ, ЕЯКХ БШ БН БРНПНИ ПЮГ ОНДЯРЮБХРЕ РН ФЕ МЮВЮКЭМНЕ ГМЮВЕМХЕ, БШ НОЪРЭ ОНКСВХРЕ РНВМН РС ФЕ ОНЯКЕДНБЮРЕКЭМНЯРЭ. еЯКХ НОСЯРХРЭ ЮПЦСЛЕМР (БШГБЮБ srand()), РН ДКЪ ОНКСВЕМХЪ МЮВЮКЭМНЦН МНЛЕПЮ АСДСР ХЯОНКЭГНБЮМШ РЕЙСЫХЕ ДЮРЮ Х БПЕЛЪ. щРН ОСРЭ ДКЪ ОНКСВЕМХЪ ВХЯЕК, ЙНРНПШЕ МЮ ЯЮЛНЛ ДЕКЕ МЕОПЕДЯЙЮГСЕЛШ. srand БНГБПЮЫЮЕР ГМЮВЕМХЕ МЮВЮКЭМНЦН МНЛЕПЮ ОПЕДШДСЫЕЦН ГЮОСЯЙЮ awk. щРН ОНГБНКЪЕР ЯКЕДХРЭ ГЮ МЮВЮКЭМШЛХ МНЛЕПЮЛХ ДКЪ ЯНЦКЮЯНБЮМХЪ ОНКСВЮЕЛШУ ЯКСВЮИМШУ ОНЯКЕДНБЮРЕКЭМНЯРЕИ.

12.3 бЯРПНЕММШЕ ТСМЙЖХХ ДКЪ ДЕИЯРБХИ Я ЖЕОНВЙЮЛХ

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

тСМЙЖХХ ЩРНЦН ПЮГДЕКЮ ОПНЯЛЮРПХБЮЧР ХКХ ХГЛЕМЪЧР РЕЙЯР НДМНИ ХКХ АНКЕЕ ЖЕОНВЕЙ. мЕНАЪГЮРЕКЭМШЕ ОЮПЮЛЕРПШ ГЮЙКЧВЕМШ Б ЙБЮДПЮРМШЕ ЯЙНАЙХ.

index(in, find)

хЫЕР Б ЖЕОНВЙЕ in ОЕПБНЕ БУНФДЕМХЕ ЖЕОНВЙХ find Х БНГБПЮЫЮЕР МНЛЕП ЯХЛБНКЮ Б ЖЕОНВЙЕ in, Я ЙНРНПНЦН МЮВХМЮЕРЯЪ ЩРН БУНФДЕМХЕ. мЮОПХЛЕП:

$ awk 'BEGIN - print index("peanut", "an") ""'
a 3
опхлевюмхе 1

цЕМЕПХПСЕЛШЕ ЙНЛОЭЧРЕПНЛ ЯКСВЮИМШЕ ВХЯКЮ МЕ ЪБКЪЧРЯЪ БОНКМЕ ЯКСВЮИМШЛХ. нМХ РЕУМХВЕЯЙХ ХГБЕЯРМШ ЙЮЙ "ОЯЕБДНЯКСВЮИМШЕ." щРН ГМЮВХР, ВРН УНРЪ ВХЯКЮ Б ОНЯКЕДНБЮРЕКЭМНЯРХ ЙЮФСРЯЪ ЯКСВЮИМШЛХ, ЛНФМН ТЮЙРХВЕЯЙХ ЦЕМЕПХПНБЮРЭ РС ФЕ ЯЮЛСЧ ОНЯКЕДНБЮРЕКЭМНЯРЭ ЯМНБЮ Х ЯМНБЮ. еЯКХ ЖЕОНВЙЮ find МЕ НАМЮПСФЕМЮ, ТСМЙЖХЪ index БШДЮЕР МНКЭ. (бЯОНЛМХЛ, ВРН ОНГХЖХХ Б ЖЕОНВЙЕ awk МСЛЕПСЕР Я ЕДХМХЖШ.)

length([string])

бШДЮЕР ЙНКХВЕЯРБН ЯХЛБНКНБ Б ЖЕОНВЙЕ string. еЯКХ string ЕЯРЭ ВХЯКН, РН БШДЮЕРЯЪ ДКХМЮ ЖХТПНБНИ ЖЕОНВЙХ, ОПЕДЯРЮБКЪЧЫЕИ ЩРН ВХЯКН. мЮОПХЛЕП, length("abcde") ЕЯРЭ ОЪРЭ. б НРКХВХЕ НР ЩРНЦН, length(15 * 35) БШПЮАЮРШБЮЕР РПХ. оНВЕЛС? мН 15 * 35 = 525, Ю 525 ЙНМБЕПРХПСЕРЯЪ Б ЖЕОНВЙС "525", ЙНРНПЮЪ ЯНДЕПФХР РПХ ЯХЛБНКЮ! еЯКХ ЮПЦСЛЕМР МЕ СЙЮГЮМ, length БШДЮЕР ДКХМС $0. б ЯРЮПШУ БЕПЯХЪУ ЛНФМН АШКН БШГШБЮРЭ ТСМЙЖХЧ length АЕГ БЯЪЙХУ ЯЙНАНЙ. щРН "ПЕГЙН НЯСФДЮЕРЯЪ" Б ЯРЮМДЮПРЕ POSIX. вРН НГМЮВЮЕР, ВРН РЮЙЮЪ БНГЛНФМНЯРЭ АСДЕР СДЮКЕМЮ ЯН БПЕЛЕМЕЛ ХГ АСДСЫХУ БЕПЯХИ ЯРЮМДЮПРЮ. оНЩРНЛС, ДКЪ ЛЮЙЯХЛЮКЭМНИ ОЕПЕМНЯХЛНЯРХ БЮЬХУ ОПНЦПЮЛЛ, МСФМН БЯЕЦДЮ СОНРПЕАКЪРЭ ЯЙНАЙХ.

match(string, regexp)

тСМЙЖХЪ match ХЫЕР Б ЖЕОНВЙЕ string ЯЮЛСЧ ДКХММСЧ, ЯЮЛСЧ КЕБСЧ ОНДЖЕОНВЙС, ЯННРБЕРЯРБСЧЫСЧ ПЕЦСКЪПМНЛС БШПЮФЕМХЧ regexp. нМЮ БНГБПЮЫЮЕР МНЛЕП ОНГХЖХХ МЮВЮКЮ МЮИДЕММНИ ОНДЖЕОНВЙХ (НДХМ, ЕЯКХ НМЮ МЮВХМЮЕРЯЪ Б МЮВЮКЕ string). еЯКХ ЯННРБЕРЯРБХЪ МЕ МЮИДЕМН, БНГБПЮЫЮЕРЯЪ МНКЭ. тСМЙЖХЪ match СЯРЮМЮБКХБЮЕР МНЛЕП МЮИДЕММНИ ОНГХЖХЧ Б БЯРПНЕММСЧ ОЕПЕЛЕММСЧ RSTART. нМЮ РЮЙФЕ СЯРЮМЮБКХБЮЕР Б БЯРПНЕММСЧ ОЕПЕЛЕММСЧ RLENGTH ДКХМС СОНЛЪМСРНИ ОНДЖЕОНВЙХ. еЯКХ РЮЙНБЮЪ МЕ НАМЮПСФЕМЮ, RSTART Х RLENGTH ОНКСВЮЧР ГМЮВЕМХЪ МНКЭ \Gamma 1.

мЮОПХЛЕП:

awk '-
if ($1 == "FIND")
regex = $2 else -
where = match($0, regex) if (where != 0)
print "Match of", regex, "found at", "
where, "in", $0 "" ""'

щРН ОПНЦПЮЛЛЮ ПЮГШЯЙХБЮЕР ЯРПНЙХ, ЙНРНПШЕ ЯННРБЕРЯРБСЧР ПЕЦСКЪПМНЛС БШПЮФЕМХЧ, ОПХЯБНЕММНЛС ОЕПЕЛЕММНИ regex. щРН ПЕЦСКЪПМНЕ БШПЮФЕМХЕ ЛНФЕР ЛЕМЪРЭЯЪ. еЯКХ ОЕПБНЕ ЯКНБН Б ЯРПНЙЕ ЕЯРЭ `FIND', regex ГЮЛЕМЪЕРЯЪ БРНПШЛ ЯКНБНЛ ЩРНИ ЯРПНЙХ. оНЩРНЛС, ЕЯКХ ДЮМН :

FIND ru+n
My program runs
but not very quickly
FIND Melvin JF+KM
This line is property of Reality Engineering Co.
Melvin was here.

awk МЮОЕВЮРЮЕР:

Match of ru+n found at 12 in My program runs
Match of Melvin found at 1 in Melvin was here.

split(string, array [, fieldsep])

щРЮ ТСМЙЖХЪ ПЮГДЕКЪЕР string МЮ ЙСЯЙХ, ПЮГДЕКЕММШЕ ЖЕОНВЙЮЛХ fieldsep, Х ГЮОХЯШБЮЕР ЙСЯЙХ Б ЛЮЯЯХБ array. оЕПБШИ ЙСЯНЙ ГЮОНЛХМЮЕРЯЪ Б array[1], БРНПНИ Б array[2], Х Р.Д. яРПНЙНБНЕ ГМЮВЕМХЕ РПЕРЭЕЦН ЮПЦСЛЕМРЮ fieldsep ЕЯРЭ regexp, СЙЮГШБЮЧЫЕЕ, ЦДЕ ПЮЯЫЕОКЪРЭ ЯРПНЙС (ЙЮЙ FS ЛНФЕР АШРЭ regexp ДКЪ ПЮГДЕКЕМХЪ БУНДМШУ ГЮОХЯЕИ). еЯКХ fieldsep НОСЫЕМН, ХЯОНКЭГСЕРЯЪ ГМЮВЕМХЕ FS. split БНГБПЮЫЮЕР ЙНКХВЕЯРБН ЯНГДЮММШУ ЩКЕЛЕМРНБ.

тСМЙЖХЪ split ПЮЯЫЕОКЪЕР ЖЕОНВЙХ МЮ ЙСЯЙХ ОНДНАМН РНЛС ЙЮЙ БУНДМШЕ ЯРПНЙХ ПЮЯЫЕОКЪЧРЯЪ МЮ ОНКЪ. мЮОПХЛЕП, split("cul-de-sac", a, "-") ПЮЯЫЕОКЪЕР ЖЕОНВЙС `cul-de-sac' МЮ РПХ ОНКЪ, ХЯОНКЭГСЪ `-' ЙЮЙ ЯЕОЮПЮРНП. нМЮ СЯРЮМЮБКХБЮЕР ЯНДЕПФХЛНЕ ЛЮЯЯХБЮ ЯКЕДСЧЫХЛ НАПЮГНЛ: a[1] = "cul" a[2] = "de" a[3] = "sac" щРНР БШГНБ БНГБПЮЫЮЕР ГМЮВЕМХЕ РПХ. йЮЙ Х Б ЯКСВЮЕ ПЮГДЕКЕМХЪ БУНДМШУ ОНКЕИ, ЕЯКХ ГМЮВЕМХЕ fieldsep ЕЯРЭ " ", МЮВЮКЭМШЕ Х ЙНМЕВМШЕ whitespace ХЦМНПХПСЧРЯЪ Х ЩКЕЛЕМРШ ПЮГДЕКЪЧРЯЪ ЦПСООЮЛХ whitespace. рЮЙФЕ ЙЮЙ Я ПЮГДЕКЕМХЕЛ БУНДМШУ ОНКЕИ, ЕЯКХ fieldsep ЕЯРЭ ОСЯРЮЪ ЖЕОНВЙЮ, ЙЮФДШИ НРДЕКЭМШИ ЯХЛБНК ЖЕОНВЙХ ОНЯРСОЮЕР Б НРДЕКЭМШИ ЩКЕЛЕМР ЛЮЯЯХБЮ. (щРН ЕЯРЭ ЯОЕЖХЮКЭМНЕ ПЮЯЬХПЕМХЕ gawk.) мЕДЮБМХЕ ПЕЮКХГЮЖХХ awk, БЙКЧВЮЪ gawk, ДНОСЯЙЮЧР Б ЙЮВЕЯРБЕ РПЕРЭЕЦН ЮПЦСЛЕМРЮ ЙЮЙ ЙНМЯРЮМРС regexp (/abc/), РЮЙ Х ЖЕОНВЙС (d.c.). яРЮМДЮПР POSIX РЮЙФЕ ДНОСЯЙЮЕР ЩРН. дН ПЮЯЫЕОКЕМХЪ ЖЕОНВЙХ split БШВЕПЙХБЮЕР БЯЕ ПЮМЕЕ ЯСЫЕЯРБСЧЫХЕ ЩКЕЛЕМРШ ЛЮЯЯХБЮ array (d.c.). еЯКХ ЖЕОНВЙЮ МЕ ЯННРБЕРЯРБСЕР fieldsep ЯНБЯЕЛ, array АСДЕР ХЛЕРЭ НДХМ ЩКЕЛЕМР. еЦН ГМЮВЕМХЕЛ АСДЕР ХЯУНДМЮЪ ЖЕОНВЙЮ.

sprintf(format, expression1,...)
щРЮ ТСМЙЖХЪ БНГБПЮЫЮЕР (АЕГ ОЕВЮРХ) РС ЖЕОНВЙС, ЙНРНПСЧ МЮОЕВЮРЮКЮ АШ ТСМЙЖХЪ
printf c РЕЛХ ФЕ ЮПЦСЛЕМРЮЛХ (ЯЛ. ПЮГДЕК 6.5 [хЯОНКЭГНБЮМХЕ НОЕПЮРНПЮ
printf ДКЪ ДЕЙНПЮРХБМНИ ОЕВЮРХ], ЯРП. 64). мЮОПХЛЕП:
sprintf("pi = %.2f (approx.)", 22/7) БНГБПЮЫЮЕР ЖЕОНВЙС
"pi = 3.14 (approx.)".
sub(regexp, replacement [, target])

тСМЙЖХЪ sub ХГЛЕМЪЕР ГМЮВЕМХЕ target. нМЮ ХЫЕР Б target, ПЮЯЯЛЮРПХБЮЕЛНИ ЙЮЙ ЖЕОНВЙЮ, ЯЮЛСЧ КЕБСЧ ЯЮЛСЧ ДКХММСЧ ОНДЖЕОНВЙС, ЯННРБЕРЯРБСЧЫСЧ ПЕЦСКЪПМНЛС БШПЮФЕМХЧ regexp, ПЮЯОПНЯРПЮМЪЪ ОНХЯЙ ЙЮЙ ЛНФМН ДЮКЭЬЕ. гЮРЕЛ Б ЖЕОНВЙЕ target МЮИДЕММШИ РЕЙЯР ГЮЛЕМЪЕРЯЪ МЮ replacement Х ЛНДХТХЖХПНБЮММЮЪ ЖЕОНВЙЮ ЯРЮМНБХРЯЪ МНБШЛ ГМЮВЕМХЕЛ target.

щРЮ ТСМЙЖХЪ --- НЯНАЕММЮЪ, ОНРНЛС ВРН target ХЯОНКЭГСЕРЯЪ МЕ РНКЭЙН ДКЪ БШВХЯКЕМХЪ ГМЮВЕМХЪ Х МЕ ДНКФМЮ АШРЭ БШПЮФЕМХЕЛ, Ю РНКЭЙН ОЕПЕЛЕММНИ, ОНКЕЛ ХКХ ЩКЕЛЕМРНЛ ЛЮЯЯХБЮ, ВРНАШ ГЮОХЯЮРЭ РСДЮ ХГЛЕМЕММНЕ ГМЮВЕМХЕ. еЯКХ ЩРНР ЮПЦСЛЕМР НОСЫЕМ, ОН СЛНКВЮМХЧ ХЯОНКЭГСЕРЯЪ Х ХГЛЕМЪЕРЯЪ $0. мЮОПХЛЕП, str = "water, water, everywhere" sub(/at/, "ith", str) ЛЕМЪЕР ГМЮВЕМХЕ str МЮ "wither, water, everywhere", ГЮЛЕМЪЪ ЯЮЛНЕ КЕБНЕ Х ЯЮЛНЕ ДКХММНЕ БУНФДЕМХЕ `at' МЮ `ith'. тСМЙЖХЪ sub БНГБПЮЫЮЕР ЙНКХВЕЯРБН ЯДЕКЮММШУ ОНДЯРЮМНБНЙ (НДХМ ХКХ МНКЭ).

еЯКХ replacement ЯНДЕПФХР ЯОЕЖХЮКЭМШИ ЯХЛБНК `&', НМ ОПЕДЯРЮБКЪЕР РНВМСЧ ОНДЖЕОНВЙС, ЯННРБЕРЯРБСЧЫСЧ regexp. (еЯКХ regexp ЛНФЕР ЯННРБЕРЯРБНБЮРЭ АНКЕЕ ВЕЛ НДМНИ ЖЕОНВЙЕ, РН ЩРЮ РНВМЮЪ ОНДЖЕОНВЙЮ ЛНФЕР ХГЛЕМЪРЭЯЪ).

мЮОПХЛЕП:

awk '- sub(/candidate/, "& and his wife"); print ""'

ГЮЛЕМЪЕР ОЕПБНЕ БУНФДЕМХЕ `candidate' МЮ `candidate and his wife'
Б ЙЮФДНИ БУНДМНИ ЯРПНЙЕ. ю БНР ДПСЦНИ ОПХЛЕП:

awk 'BEGIN -
str = "daabaaa" sub(/a*/, "c&c", str) print str ""'
a dcaacbaaa

гДЕЯЭ ОНЙЮГЮМН, ЙЮЙ `&' ЛНФЕР ОПЕДЯРЮБКЪРЭ МЕОНЯРНЪММШЕ ЖЕОНВЙХ, Ю РЮЙФЕ ХККЧЯРПХПСЕРЯЪ ОПЮБХКН "ЯЮЛЮЪ КЕБЮЪ ЯЮЛЮЪ ДКХММЮЪ" Б ЯННРБЕРЯРБХХ regexp (ЯЛ. ПЮГДЕК 4.6 [йЮЙ ЛМНЦН РЕЙЯРЮ ЯННРБЕРЯРБСЕР?], ЯРП.34). щТТЕЙР НР ЩРНЦН ЯОЕЖХЮКЭМНЦН ЯХЛБНКЮ (`&') ЛНФЕР АШРЭ ХЯЙКЧВЕМ ОНЛЕЫЕМХЕЛ ОЕПЕД МХЛ Б ЖЕОНВЙЕ НАПЮРМНЦН ЯКЕЬ. йЮЙ НАШВМН, ВРНАШ БЯРЮБХРЭ НДХМ НАПЮРМШИ ЯКЕЬ Б ЖЕОНВЙС, МСФМН МЮОХЯЮРЭ ДБЮ ОНДПЪД. оНЩРНЛС ОХЬХРЕ `""&' Б ЯРПНЙНБНИ ЙНМЯРЮМРЕ ДКЪ БЙКЧВЕМХЪ КХРЕПЮКЮ `&' Б replacement. мЮОПХЛЕП, ОНЙЮФЕЛ, ЙЮЙ ГЮЛЕМХРЭ ОЕПБШИ `--' Б ЙЮФДНИ ЯРПНЙЕ Я `&':

awk '- sub(/"--/, """&"); print ""'

гЮЛЕРЭРЕ: ЙЮЙ ЦНБНПХКНЯЭ БШЬЕ, РПЕРХИ ЮПЦСЛЕМР sub ДНКФЕМ АШРЭ ОЕПЕЛЕММНИ, ОНКЕЛ ХКХ ЯЯШКЙНИ МЮ ЛЮЯЯХБ. мЕЙНРНПШЕ БЕПЯХХ awk ДНОСЯЙЮЧР Б ЙЮВЕЯРБЕ РПЕРЭЕЦН ЮПЦСЛЕМРЮ БШПЮФЕМХЕ, ЙНРНПНЕ МЕ ЪБКЪЕРЯЪ lvalue. б РЮЙХУ ЯКСВЮЪУ sub АСДЕР ХЯЙЮРЭ НАПЮГЕЖ Х БНГБПЮЫЮРЭ МНКЭ ХКХ НДХМ, МН ПЕГСКЭРЮР ОНДЯРЮМНБЙХ (ЕЯКХ АСДЕР) НРАПЮЯШБЮЕРЯЪ. рЮЙХЕ БЕПЯХХ awk ОПХМХЛЮЧР БШПЮФЕМХЪ БХДЮ, ОНДНАМНЦН ЯКЕДСЧЫЕЛС: sub(/USA/, "United States", "the USA and Canada") дКЪ ХЯРНПХВЕЯЙНИ ЯНБЛЕЯРХЛНЯРХ gawk ДНОСЯЙЮЕР ОНДНАМШЕ ЙНДШ. нДМЮЙН, ХЯОНКЭГНБЮМХЕ БЯЪЙХУ ДПСЦХУ МЕХГЛЕМЪЕЛШУ НАЗЕЙРНБ Б ЙЮВЕЯРБЕ РПЕРЭЕЦН ОЮПЮЛЕРПЮ ОПХБНДХР Й ТЮРЮКЭМНИ НЬХАЙЕ Х ОПНЦПЮЛЛЮ МЕ ХЯОНКМЪЕРЯЪ.

мЮЙНМЕЖ, ЕЯКХ regexp МЕ ЕЯРЭ ЙНМЯРЮМРЮ regexp, НМН ОПЕБПЮЫЮЕРЯЪ Б ЖЕОНВЙС, ЙНРНПЮЪ ХЯОНКЭГСЕРЯЪ ЙЮЙ regexp ДКЪ ЯННРБЕРЯРБХЪ.

gsub(regexp, replacement [, target])

дЕИЯРБСЕР ОНДНАМН sub, МН ГЮЛЕМЪЕР БЯЕ ДКХММЕИЬХЕ КЕБШЕ МЕ ОЕПЕЙПШБЮЧЫХЕЯЪ ЯННРБЕРЯРБСЧЫХЕ ОНДЖЕОНВЙХ, ЙНРНПШЕ ЛНФЕР МЮИРХ. `g' Б gsub НГМЮВЮЕР "global," Р.Е. ГЮЛЕМЪРЭ ОНБЯЧДС.

мЮОПХЛЕП:

awk '- gsub(/Britain/, "United Kingdom"); print ""' ГЮЛЕМЪЕР БЯЕ БУНФДЕМХЪ ЖЕОНВЙХ `Britain' МЮ `United Kingdom' БН БЯЕУ БУНДМШУ ГЮОХЯЪУ. тСМЙЖХЪ gsub БНГБПЮЫЮЕР ВХЯКН ЯДЕКЮММШУ ОНДЯРЮМНБНЙ. еЯКХ ОЕПЕЛЕММЮЪ ДКЪ ОНХЯЙЮ Х ГЮЛЕМШ, target, НОСЫЕМЮ, РН ХЯОНКЭГСЕРЯЪ БЯЪ БУНДМЮЪ ГЮОХЯЭ $0. йЮЙ Х Б sub, ЯХЛБНКШ `&' and `"' ХЛЕЧР ЯОЕЖХЮКЭМШИ ЯЛШЯК Х РПЕРХИ ЮПЦСЛЕМР ДНКФЕМ АШРЭ lvalue.

gensub(regexp, replacement, how [, target])

gensub ЕЯРЭ НАЫЮЪ ТСМЙЖХЪ ОНДЯРЮМНБЙХ. оНДНАМН sub Х gsub, НМЮ ХЫЕР Б ЖЕОНВЙЕ target ОНДЖЕОНВЙС, ЯННРБЕРЯРБСЧЫСЧ ПЕЦСКЪПМНЛС БШПЮФЕМХЧ regexp. б НРКХВХЕ НР sub Х gsub, ЛНДХТХЖХПНБЮММЮЪ ЖЕОНВЙЮ БНГБПЮЫЮЕРЯЪ ЙЮЙ ПЕГСКЭРЮР ТСМЙЖХХ, Ю НПХЦХМЮКЭМЮЪ ЖЕОНВЙЮ target МЕ ЛЕМЪЕРЯЪ. еЯКХ how ЕЯРЭ ЖЕОНВЙЮ, МЮВХМЮЧЫЮЪЯЪ Я `g' ХКХ `G', РН gensub ГЮЛЕЫЮЕР БЯЕ ЯННРБЕРЯРБХЪ regexp МЮ replacement. б ОПНРХБМНЛ ЯКСВЮЕ how ЕЯРЭ ВХЯКН, СЙЮГШБЮЧЫЕЕ, ЙЮЙНЕ ЯННРБЕРЯРБХЕ regexp ГЮЛЕМХРЭ. еЯКХ target НРЯСРЯРБСЕР, БЛЕЯРН МЕЕ ХЯОНКЭГСЕРЯЪ $0.

gensub ХЛЕЕР ДНОНКМХРЕКЭМНЕ ЯБНИЯРБН, НРЯСРЯРБСЧЫЕЕ Б sub Х gsub: БНГЛНФМНЯРЭ СЙЮГШБЮРЭ ЙНЛОНМЕМРШ regexp Б РЕЙЯРЕ ДКЪ ГЮЛЕЫЕМХЪ. щРН ДЕКЮЕРЯЪ Я ОНЛНЫЭЧ ЯЙНАНЙ Б regexp ДКЪ НРЛЕРЙХ ЙНЛОНМЕМР Х ГЮРЕЛ СЙЮГЮМХЕЛ `"n' Б ГЮЛЕЫЮЧЫЕЛ РЕЙЯРЕ, ЦДЕ n ЕЯРЭ ЖХТПЮ НР 1 ДН 9.

мЮОПХЛЕП:

$ gawk ' ? BEGIN - ? a = "abc def" ?
b = gensub(/(.+) (.+)/, """2 ""1", "g", a) ? print b ? ""'
a def abc

йЮЙ ЯЙЮГЮМН БШЬЕ ДКЪ sub, БШ ДНКФМШ МЮОХЯЮРЭ ДБЮ НАПЮРМШУ ЯКЕЬЮ ДКЪ РНЦН ВРНАШ БЯРЮБХРЭ НДХМ Б ЖЕОНВЙС. б ГЮЛЕЫЮЧЫЕЛ РЕЙЯРЕ ОНЯКЕДНБЮРЕКЭМНЯРЭ `"0' ОПЕДЯРЮБКЪЕР ЖЕКШИ ЯННРБЕРЯРБСЧЫХИ РЕЙЯР, ЙЮЙ ЩРН ДЕКЮЕР ЯХЛБНК `&'. яКЕДСЧЫХИ ОПХЛЕП ОНЙЮГШБЮЕР, ЙЮЙ ЛНФМН ХЯОНКЭГНБЮРЭ РПЕРХИ ЮПЦСЛЕМР ДКЪ СЙЮГЮМХЪ, ЙЮЙНЕ ЯННРБЕРЯРБХЕ regexp ДНКФМН АШРЭ ГЮЛЕМЕМН:

$ echo a b c a b c -- ? gawk '- print gensub(/a/, "AA", 2) ""'
a a b c AA b c

б ЩРНЛ ЯКСВЮЕ ОН СЛНКВЮМХЧ $0 ХЯОНКЭГСЕРЯЪ Б ЙЮВЕЯРБЕ ЖЕОНВЙХ target. gensub БНГБПЮЫЮЕР МНБСЧ ЖЕОНВЙС ЙЮЙ ЯБНИ ПЕГСКЭРЮР, ЙНРНПШИ ОЕПЕДЮЕРЯЪ МЕОНЯПЕДЯРБЕММН Б print ДКЪ ОЕВЮРХ.

еЯКХ ЮПЦСЛЕМР how ЕЯРЭ ЖЕОНВЙЮ, ЙНРНПЮЪ МЕ МЮВХМЮЕРЯЪ Я `g' ХКХ `G', ХКХ ЕЯКХ ЩРН ВХЯКН ЛЕМЭЬЕЕ МСКЪ, РН ОПНХГБНДХРЯЪ РНКЭЙН НДМЮ ОНДЯРЮМНБЙЮ. еЯКХ regexp МЕ ЯННРБЕРЯРБСЕР target, РН gensub БНГБПЮЫЮЕР ХЯУНДМНЕ, МЕ ХГЛЕМЕММНЕ ГМЮВЕМХЕ target.

gensub ЕЯРЭ ПЮЯЬХПЕМХЕ gawk; НМЮ МЕДНЯРСОМЮ Б ПЕФХЛЕ ЯНБЛЕЯРХЛНЯРХ (ЯЛ. ПЮГДЕК 14.1 [оЮПЮЛЕРПШ ЙНЛЮМДМНИ ЯРПНЙХ], ЯРП. 161).

substr(string, start [, length])

бНГБПЮЫЮЕР ОНДЖЕОНВЙС ДКХМШ length ЖЕОНВЙХ string, МЮВХМЮЧЫСЧЯЪ Я ЯХЛБНКЮ Я МНЛЕПНЛ start. оЕПБШИ ЯХЛБНК string ХЛЕЕР МНЛЕП НДХМ.

мЮОПХЛЕП, substr("washington", 5, 3) БНГБПЮЫЮЕР "ing".

еЯКХ length НРЯСРЯРБСЕР, ЩРЮ ТСМЙЖХЪ БНГБПЮЫЮЕР УБНЯР ЖЕОНВЙХ string, ЙНРНПШИ МЮВХМЮЕРЯЪ Я ЯХЛБНКЮ МНЛЕП start. мЮОПХЛЕП, substr("washington", 5) БНГБПЮЫЮЕР "ington". бЕЯЭ УБНЯР БНГБПЮЫЮЕРЯЪ РЮЙФЕ, ЕЯКХ length АНКЭЬЕ ДКХМШ УБНЯРЮ.

гюлевюмхе: ЖЕОНВЙЕ, БНГБПЮЫЮЕЛНИ substr, МЕКЭГЪ МХВЕЦН ОПХЯБЮХБЮРЭ. рЮЙ, АСДЕР НЬХАЙНИ ОШРЮРЭЯЪ ХГЛЕМХРЭ ВЮЯРЭ ЖЕОНВЙХ ОНДНАМН ЯКЕДСЧЫЕЛС:

string = "abcdef"
# ОНОШРЙЮ ОНКСВХРЭ  "abCDEf" МЕ ЯПЮАНРЮЕР:
substr(string, 3, 3) = "CDE"

ХКХ ХЯОНКЭГНБЮРЭ  substr ЙЮЙ РПЕРХИ ЮПЦСЛЕМР Б sub ХКХ gsub:

gsub(/xyz/, "pdq", substr($0, 5, 20)) # WRONG
tolower(string)

бНГБПЮЫЮЕР ЙНОХЧ ЖЕОНВЙХ, Б ЙНРНПНИ АСЙБШ БЕПУМЕЦН ПЕЦХЯРПЮ ГЮЛЕМЕМШ МЮ ЯННРБЕРЯРБСЧЫХЕ АСЙБШ МХФМЕЦН. мЕАСЙБЕММШЕ ЯХЛБНКШ МЕ ЛЕМЪЧРЯЪ. мЮОПХЛЕП, tolower("MiXeD cAsE 123") БЕПМЕР "mixed case 123".

toupper(string)

бНГБПЮЫЮЕР ЙНОХЧ ЖЕОНВЙХ, Б ЙНРНПНИ АСЙБШ МХФМЕЦН ПЕЦХЯРПЮ ГЮЛЕМЕМШ МЮ ЯННРБЕРЯРБСЧЫХЕ АСЙБШ БЕПУМЕЦН ПЕЦХЯРПЮ. нЯРЮКЭМШЕ ЯХЛБНКШ МЕ ЛЕМЪЧРЯЪ. мЮОПХЛЕП, toupper("MiXeD cAsE 123") БНГБПЮРХР "MIXED CASE 123".

дНОНКМХРЕКЭМШЕ ЯБЕДЕМХЪ Н `"' Х `&' Б sub, gsub Х gensub

оПХ ХЯОНКЭГНБЮМХХ sub, gsub ХКХ gensub, ЯРЮПЮЪЯЭ ОНКСВХРЭ КХРЕПЮКШ НАПЮРМШУ ЯКЕЬЕИ Х ЮЛОЕПЯЮМРНБ Б ГЮЛЕЫЮЧЫЕЛ РЕЙЯРЕ, МЕНАУНДХЛН ОНЛМХРЭ, ВРН ХЛЕЕРЯЪ МЕЯЙНКЭЙН СПНБМЕИ НАПЮАНРЙХ СОПЮБКЪЧЫХУ ОНЯКЕДНБЮРЕКЭМНЯРЕИ.

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

гЮРЕЛ ЯКЕДСЕР СПНБЕМЭ ХЯОНКМЕМХЪ, ЙНЦДЮ awk ТЮЙРХВЕЯЙХ ОПНЯЛЮРПХБЮЕР ГЮЛЕМЪЧЫСЧ ЖЕОНВЙС Х НОПЕДЕКЪЕР, ВРН ЦЕМЕПХПНБЮРЭ.

мЮ НАНХУ СПНБМЪУ awk ХЫЕР НОПЕДЕКЕММНЕ ЛМНФЕЯРБН ЯХЛБНКНБ, ЙНРНПШЕ ЛНЦСР ХДРХ ГЮ НАПЮРМШЛ ЯКЕЬЕЛ. мЮ КЕЙЯХВЕЯЙНЛ СПНБМЕ НМ ХЫЕР СОПЮБКЪЧЫХЕ ОНЯКЕДНБЮРЕКЭМНЯРХ, ОЕПЕВХЯКЕММШЕ Б ПЮГДЕКЕ 4.2 [сОПЮБКЪЧЫХЕ ОНЯКЕДНБЮРЕКЭМНЯРХ], ЯРП. 24. рЮЙ, ДКЪ ЙЮФДНЦН `"' ЙНРНПШИ awk АСДЕР НАПЮАЮРШБЮРЭ МЮ СПНБМЕ ХЯОНКМЕМХЪ, БШ ОЕВЮРЮЕРЕ ДБЮ `"' ДКЪ КЕЙЯХВЕЯЙНЦН СПНБМЪ. йНЦДЮ ЯХЛБНК, ЙНРНПШИ МЕ ЛНФЕР АШРЭ Б СОПЮБКЪЧЫЕИ ОНЯКЕДНБЮРЕКЭМНЯРХ, ЯКЕДСЕР ГЮ `"', Unix awk Х gawk НАЮ ОПНЯРН СДЮКЪЧР МЮВЮКЭМШИ `"'Х ЙКЮДСР ЯКЕДСЧЫХИ ЯХЛБНК Б ЖЕОНВЙС. рЮЙ, МЮОПХЛЕП, "a"qb" РПЮЙРСЕРЯЪ ЙЮЙ "aqb".

мЮ СПНБМЕ ХЯОНКМЕМХЪ ПЮГКХВМШЕ ТСМЙЖХХ НАПЮАЮРШБЮЧР ОНЯКЕДНБЮРЕКЭМНЯРХ ХГ `"' Х `&' ПЮГКХВМШЛ НАПЮГНЛ. яХРСЮЖХЪ, Й МЕЯВЮЯРЭЧ, ДНБНКЭМН ЯКНФМЮЪ. хЯРНПХВЕЯЙХ ТСМЙЖХХ sub Х gsub ПЮЯЯЛЮРПХБЮЧР ДБСУ ЯХЛБНКЭМШЕ ОНЯКЕДНБЮРЕКЭМНЯРХ `"&' ЯОЕЖХЮКЭМН; ЩРЮ ОНЯКЕДНБЮРЕКЭМНЯРЭ АШКЮ ГЮЛЕМЕМЮ Б ЦЕМЕПХПНБЮММНЛ РЕЙЯРЕ НДМХЛ `&'. бЯЕ ДПСЦХЕ `"' Б ОПЕДЕКЮУ ГЮЛЕЫЮЧЫЕИ ЖЕОНВЙХ, ЙНРНПШЕ МЕ ОПЕДЬЕЯРБНБЮКХ ЯХЛБНКС `&', АШКХ ОЕПЕДЮМШ АЕГ ХГЛЕМЕМХЪ.


оПНХККЧЯРПХПСЕЛ ЩРН РЮАКХЖЕИ:

бШ ОЕВЮРЮЕРЕ    sub БХДХР        sub ЦЕМЕПХПСЕР

"&                &            the matched text
""&              "&              a literal `&'
"""&             "&              a literal `&'
""""&           ""&              a literal `"&'
"""""&          ""&              a literal `"&'
""""""&        """&              a literal `""&'
""q              "q              a literal `"q'

щРЮ РЮАКХЖЮ ОНЙЮГШБЮЕР НАЮ СПНБМЪ: КЕЙЯХВЕЯЙХИ СПНБЕМЭ НАПЮАНРЙХ, ЦДЕ МЕВЕРМНЕ ЙНКХВЕЯРБН НАПЮРМШУ ЯКЕЬЕИ ЯРЮМНБХРЯЪ ВЕРМШЛ ДКЪ СПНБМЪ ХЯОНКМЕМХЪ , Х НАПЮАНРЙС МЮ СПНБМЕ ХЯОНКМЕМХЪ, ОПНДЕКШБЮЕЛСЧ ТСМЙЖХЕИ sub. (дКЪ СОПНЫЕМХЪ ЯКЕДСЧЫХЕ РЮАКХЖШ ОНЙЮГШБЮЧР РНКЭЙН ЯКСВЮИ ВЕРМНЦН ЙНКХВЕЯРБЮ `"', НАПЮАЮРШБЮЕЛШУ МЮ КЕЙЯХВЕЯЙНЛ СПНБМЕ.)

оПНАКЕЛЮ Я ХЯРНПХВЕЯЙХЛ ОНДУНДНЛ ЯНЯРНХР Б РНЛ, ВРН МЕР ЯОНЯНАЮ ОНКСВХРЭ КХРЕПЮК `"', ГЮ ЙНРНПШЛ ЯКЕДСЕР ЯННРБЕРЯРБСЧЫХИ НАПЮГЖС РЕЙЯР. яРЮМДЮПР POSIX 1992 ОШРЮКЯЪ ПЮГПЕЬХРЭ ЩРС ОПНАКЕЛС. яРЮМДЮПР ЦНБНПХР, ВРН sub and gsub ХЫСР КХАН `"' КХАН `&' ОНЯКЕ `"'. еЯКХ ЙЮЙНИ-МХАСДЭ ХГ МХУ ЯКЕДСЕР ГЮ `"', РН ЩРНР ЯХЛБНК БШДЮЕРЯЪ АСЙБЮКЭМН. хМРЕПОПЕРЮЖХЪ `"' `&' РНЦДЮ ЯРЮМНБХРЯЪ РЮЙНИ:

бШ ОЕВЮРЮЕРЕ             sub БХДХР            sub ЦЕМЕПХПСЕР

   &                         &                the matched text
""&                         "&                 literal `&'
""""&                      ""&            literal `"', then the matched text
""""""&                   """&              a literal `"&'

йЮФЕРЯЪ, ВРН ОПНАКЕЛЮ ПЕЬЕМЮ. й МЕЯВЮЯРЭЧ, ЯКНБЮ Б ЯРЮМДЮПРЕ МЕЪЯМШ. нМ ЦНБНПХР ТЮЙРХВЕЯЙХ, ВРН `"' НРЙКЧВЮЕР ЯОЕЖХЮКЭМШИ ЯЛШЯК БЯЕУ ЯКЕДСЧЫХУ ЯХЛБНКНБ, МН ЩРН РНКЭЙН ДКЪ НРКХВМШУ НР `"' Х `&'. рЮЙНИ ЯОЕЖХЮКЭМШИ ЯЛШЯК МЕОНМЪРЕМ. рЮЙНЕ НОПЕДЕКЕМХЕ ОПХБНДХР Й ДБСЛ ОПНАКЕЛЮЛ.

1. нАПЮРМШЕ ЯКЕЬХ ДНКФМШ РЕОЕПЭ ДСАКХПНБЮРЭЯЪ Б ЖЕОНВЙЕ ГЮЛЕЫЕМХЪ, ВРН ПЮГПСЬЮЕР ХЯРНПХВЕЯЙХЕ ОПНЦПЮЛЛШ awk.

2. вРНАШ АШРЭ СБЕПЕММШЛ Б ОЕПЕМНЯХЛНЯРХ awk-ОПНЦПЮЛЛ, ЙЮФДНЛС ЯХЛБНКС Б ГЮЛЕЫЮЧЫЕИ ЖЕОНВЙЕ ДНКФЕМ ОПЕДЬЕЯРБНБЮРЭ НАПЮРМШИ ЯКЕЬ.

2 яРЮМДЮПР POSIX ОЕПЕЯЛЮРПХБЮЕРЯЪ.

3 б ЯБЪГХ Я СОНЛЪМСРШЛХ БШЬЕ ОПНАКЕЛЮЛХ ОПЕДКНФЕММШИ РЕЙЯР ДКЪ ХГЛЕМЕММНЦН ЯРЮМДЮПРЮ БНГБПЮЫЮЕРЯЪ Й ОПЮБХКЮЛ, ЙНРНПШЕ АНКЕЕ РЕЯМН ЯННРБЕРЯРБСЧР ЯСЫЕЯРБСЧЫЕИ ОПЮЙРХЙЕ. оПЕДКНФЕММШЕ ОПЮБХКЮ ХЛЕЧР ЯОЕЖХЮКЭМШЕ ЯКСВЮХ, ЙНРНПШЕ ОНГБНКЪЧР БШДЮБЮРЭ `"' ОЕПЕД ЯННРБЕРЯРБСЧЫХЛ РЕЙЯРНЛ.

бШ ОЕВЮРЮЕРЕ                sub БХДХР               sub ЦЕМЕПХПСЕР

""""""&                     """&                    a literal `"&'
""""&                       ""&       literal `"', followed by the matched text
""&                         "&                       literal `&'
""q                          "q                     literal `"q'

йНПНВЕ, МЮ СПНБМЕ БШОНКМЕМХЪ РЕОЕПЭ ХЛЕЧРЯЪ РПХ ЯОЕЖХЮКЭМШЕ ОНЯКЕДНБЮРЕКЭМНЯРХ ЯХЛБНКНБ, `"""&', `""&' Х `"&', Б РН БПЕЛЪ ЙЮЙ ХЯРНПХВЕЯЙХ АШКЮ РНКЭЙН НДМЮ. нДМЮЙН, ЙЮЙ Х Б ХЯРНПХВЕЯЙНЛ ЯКСВЮЕ, КЧАНИ `"' , ЙНРНПШИ МЕ ЕЯРЭ ВЮЯРЭ НДМНИ ХГ СОНЛЪМСРШУ РПЕУ ОНЯКЕДНБЮРЕКЭМНЯРЕИ, МЕ ЪБКЪЕРЯЪ ЯОЕЖХЮКЭМШЛ Х ОНЪБКЪЕРЯЪ Б БШУНДЕ АСЙБЮКЭМН.

gawk 3.0 ЯКЕДСЕР ЩРХЛ ОПЕДКНФЕММШЛ ОПЮБХКЮЛ POSIX ДКЪ sub Х gsub. аСДСР КХ ЩРХ ОПЕДКНФЕММШЕ ОПЮБХКЮ ББЕДЕМШ Б ЯРЮМДЮПР, Б МЮЯРНЪЫЕЕ БПЕЛЪ МЕ ХГБЕЯРМН. оНЯКЕДСЧЫХЕ БШОСЯЙХ gawk АСДСР ЯКЕДНБЮРЭ ЯРЮМДЮПРС Х ПЕЮКХГНБЮРЭ СЙЮГЮМХЪ НЙНМВЮРЕКЭМНИ ЕЦН БЕПЯХХ; РЮЙФЕ АСДЕР ХГЛЕМЕМЮ Х ЯННРБЕРЯРБСЧЫЮЪ ВЮЯРЭ ЩРНИ ЙМХЦХ.

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

бШ ОЕВЮРЮЕРЕ                 gensub БХДХР            gensub ЦЕМЕПХПСЕР

&                             &                       the matched text
""&                          "&                       literal `&'
""""                         ""                       literal `"'
""""&                        ""&                literal `"', then the matched text
""""""&                     """&                      literal `"&'
""q                          "q                       literal `q'

бЯКЕДЯРБХЕ ЯКНФМНЯРХ НАПЮАНРЙХ МЮ КЕЙЯХВЕЯЙНЛ Х ХЯОНКМХРЕКЭМНЛ СПНБМЪУ Х ЯОЕЖХЮКЭМШУ ЯКСВЮЕБ ДКЪ sub Х gsub, ЛШ ПЕЙНЛЕМДСЕЛ ХЯОНКЭГНБЮРЭ gawk Х gensub, ЙНЦДЮ МСФМН ЯДЕКЮРЭ ОНДЯРЮМНБЙХ.


2 щРН ЯКЕДЯРБХЕ АШКН НОПЕДЕКЕММН МЕОПЕДМЮЛЕПЕММШЛ.

3 йЮЙ Б ЮОПЕКЕ 1999, Я НЙНМВЮРЕКЭМШЛ ЯЮМЙЖХНМХПНБЮМХЕЛ Х ОСАКХЙЮЖХЕИ ЦДЕ-РН Б in 1997.

12.4 бЯРПНЕММШЕ ТСМЙЖХХ ДКЪ ББНДЮ\БШБНДЮ

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

яКЕДСЧЫХЕ МХФЕ ТСМЙЖХХ НРМНЯЪРЯЪ Й ББНДС\БШБНДС (I/O). мЕНАЪГЮРЕКЭМШЕ ОЮПЮЛЕРПШ ГЮЙКЧВЕМШ Б ЙБЮДПЮРМШЕ ЯЙНАЙХ ("[" Х "]").

close(filename)

гЮЙПШБЮЕР ТЮИК filename ДКЪ ББНДЮ Х БШБНДЮ. юКЭРЕПМЮРХБМШЛ ЮПЦСЛЕМРНЛ ЛНФЕР АШРЭ ЙНЛЮМДЮ НАНКНВЙХ, ЙНРНПЮЪ ХЯОНКЭГНБЮКЮЯЭ ДКЪ ОЕПЕМЮОПЮБКЕМХЪ Й ХКХ НР ЙНМБЕИЕПЮ; РНЦДЮ ЙНМБЕИЕП ГЮЙПШБЮЕРЯЪ. яЛ. ПЮГДЕК 6.8 [гЮЙПШРХЕ БУНДМШУ Х БШУНДМШУ ТЮИКНБ Х ЙНМБЕИЕПНБ], ЯРП. 74.

fflush([filename])

оНДЮБХРЭ КЧАНЕ ЯБЪГЮММНЕ Я АСТЕПМШЛ БШБНДНЛ ХЛЪ, ЙНРНПНЕ ЕЯРЭ ХКХ ТЮИК, НРЙПШРШИ ДКЪ ГЮОХЯХ ХКХ ЙНЛЮМДЮ НАНКНВЙХ ДКЪ ОЕПЕМЮОПЮБКЕМХЪ БШБНДЮ Б ЙНМБЕИЕП. лМНЦХЕ ЯКСФЕАМШЕ ОПНЦПЮЛЛШ АСТЕПХГСЧР ЯБНИ БШБНД; Б МЕЛ УПЮМХРЯЪ ХМТНПЛЮЖХЪ ДКЪ ГЮОХЯХ МЮ ДХЯЙНБШИ ТЮИК ХКХ РЕПЛХМЮК Б ОЮЛЪРХ ДН РЕУ ОНП ОНЙЮ МЕ МЮАЕПЕРЯЪ ДНЯРЮРНВМЮЪ ОНПЖХЪ ДКЪ ОНЯШКЙХ МЮ БШУНДМНЕ СЯРПНИЯРБН. вЮЯРН ЩРН АНКЕЕ ЩТТЕЙРХБМН ВЕЛ ГЮОХЯЭ ЙЮФДНЦН АХРЮ ОПХ ЕЦН ОНЪБКЕМХХ. нДМЮЙН, ХМНЦДЮ МЕНАУНДХЛН ОНДРНКЙМСРЭ ОПНЦПЮЛЛС НЯБНАНДХРЭ ЕЕ АСТЕПЮ, РН ЕЯРЭ ГЮОХЯЮРЭ ОН ЕЕ МЮГМЮВЕМХЧ ДЮФЕ ЕЯКХ АСТЕП ЕЫЕ МЕ ОНКНМ. дКЪ ЩРНЦН ТСМЙЖХЪ fflush Х ОПЕДМЮГМЮВЕМЮ. gawk РНФЕ АСТЕПХГСЕР ЯБНИ БШБНД, Х ТСМЙЖХЪ fflush ЛНФЕР ХЯОНКЭГНБЮРЭЯЪ ДКЪ НЯБНАНФДЕМХЪ ЕЕ АСТЕПНБ.

fflush ОПЕДЯРЮБКЪЕР МЕДЮБМЕЕ (1994) ДНАЮБКЕМХЕ Й Bell Labs research БЕПЯХХ awk; НМЮ МЕ БУНДХР Б ЯРЮМДЮПР POSIX Х МЕДНЯРСОМЮ, ЕЯКХ Б ЙНЛЮМДМНИ ЯРПНЙЕ АШКН МЮАПЮМН `--posix' (ЯЛ. ПЮГДЕК 14.1 [оЮПЮЛЕРПШ ЙНЛЮМДМНИ ЯРПНЙХ], ЯРП. 161).

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

system(command)

тСМЙЖХЪ system ОНГБНКЪЕР ОНКЭГНБЮРЕКЧ БШОНКМХРЭ ЙНЛЮМДС НОЕПЮЖХНММНИ ЯХЯРЕЛШ Х ГЮРЕЛ ОПНДНКФХРЭ БШОНКМЕМХЕ awk-ОПНЦПЮЛЛШ. тСМЙЖХЪ system БШОНКМЪЕР ЙНЛЮМДС, НОПЕДЕКЕММСЧ ЙНЛЮМДМНИ ЖЕОНВЙНИ. б ЙЮВЕЯРБЕ ЯБНЕЦН ГМЮВЕМХЪ НМЮ БНГБПЮЫЮЕР ЯНЯРНЪМХЕ, БНГБПЮЫЕММНЕ БШОНКМЕММНИ ЙНЛЮМДНИ. мЮОПХЛЕП, ЯКЕДСЧЫХИ ТПЮЦЛЕМР ЙНДЮ БЮЬЕИ ОПНЦПЮЛЛШ:

END -
system("date -- mail -s 'awk run done' root") ""

ОНЯШКЮЕР ЯХЯРЕЛМНЛС ЮДЛХМХЯРПЮРНПС ЯННАЫЕМХЕ НА НЙНМВЮМХХ ОПНЦПЮЛЛШ, ЙНЦДЮ НМЮ ГЮЙНМВХР НАПЮАНРЙС ББНДЮ Х МЮВМЕР НАПЮАНРЙС ЯБНЕЦН ГЮБЕПЬЕМХЪ.

гЮЛЕРХЛ, ВРН ОЕПЕМЮОПЮБКЕМХЕ print ХКХ printf Б ЙНМБЕИЕП ВЮЯРН ДНЯРЮРНВМН ДКЪ ГЮБЕПЬЕМХЪ БЮЬЕИ ГЮДЮВХ. еЯКХ МСФМН БШОНКМХРЭ МЕЯЙНКЭЙН ЙНЛЮМД, АСДЕР АНКЕЕ ЩТТЕЙРХБМШЛ ОПНЯРН МЮОЕВЮРЮРЭ ХУ Б ЙНМБЕИЕП Й НАНКНВЙЕ:

while (ВРН МСФМН ЯДЕКЮРЭ)
print command -- "/bin/sh" close("/bin/sh")

нДМЮЙН ЕЯКХ БЮЬЮ awk-ОПНЦПЮЛЛЮ ХМРЕПЮЙРХБМЮ, system ОНКЕГМЮ ДКЪ ГЮОСЯЙЮ АНКЭЬХУ ЯЮЛНЯРНЪРЕКЭМШУ ОПНЦПЮЛЛ, РЮЙХУ ЙЮЙ НАНКНВЙЮ ХКХ ПЕДЮЙРНП. мЕЙНРНПШЕ НОЕПЮЖХНММШЕ ЯХЯРЕЛШ МЕ ЛНЦСР ПЕЮКХГНБШБЮРЭ ЯХЯРЕЛМШЕ ТСМЙЖХХ. б РЮЙХУ ЯКСВЮЪУ system ОПХБНДХР Й ТЮРЮКЭМНИ НЬХАЙЕ.

хМРЕПЮЙРХБМШЕ vs . мЕХМРЕПЮЙХБМЮЪ АСТЕПХГЮЖХЪ

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

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

$ awk '- print $1 + $2 ""' 1 1
a 2 2 3
a 5 Control-d

йЮФДЮЪ ЯРПНЙЮ БШБНДЮ ОЕВЮРЮЕРЯЪ МЕЛЕДКЕММН. яПЮБМХРЕ ЩРН ОНБЕДЕМХЕ ЯН
ЯКЕДСЧЫХЛ ОПХЛЕПНЛ.

$ awk '- print $1 + $2 ""' -- cat 1 1 2 3 Control-d
_____________________________
4  оПНЦПЮЛЛЮ ХМРЕПЮЙРХБМЮ, ЕЯКХ ЯРЮМДЮПРМШИ БШБНД ЯБЪГЮМ Я РЕПЛХМЮКНЛ.

a 2
a 5

гДЕЯЭ МХЙЮЙНЦН БШБНДЮ МЕ ОЕВЮРЮЕРЯЪ, ОНЙЮ МЕ АСДЕР БШДЮМ Control-d, ОНЯЙНКЭЙС НМ БЕЯЭ АСТЕПХГНБЮМ Х ОНЯКЮМ ОН ЙНМБЕИЕПС Й cat НДМНИ ОНПЖХЕИ.

сОПЮБКЕМХЕ БШУНДМНИ АСТЕПХГЮЖХЕИ Я ОНЛНЫЭЧ ТСМЙЖХХ system

тСМЙЖХЪ flush НЯСЫЕЯРБКЪЕР ЪБМНЕ СОПЮБКЕМХЕ БШУНДМНИ АСТЕПХГЮЖХЕИ ДКЪ НРДЕКЭМШУ ТЮИКНБ Х ЙНМБЕИЕПНБ. мН ХУ ХЯОНКЭГНБЮМХЕ МЕ ОЕПЕМНЯХРЯЪ МЮ ЛМНЦХЕ ДПСЦХЕ ПЕЮКХГЮЖХХ awk. юКЭРЕПМЮРХБМШИ ЛЕРНД НВХЯРЙХ БШУНДМШУ АСТЕПНБ ЯНЯРНХР Б ХЯОНКЭГНБЮМХХ system Я ОСЯРНИ ЖЕОНВЙНИ Б ЙЮВЕЯРБЕ ЮПЦСЛЕМРЮ:

system("") # flush output

gawk РПЮЙРСЕР РЮЙНЕ СОНРПЕАКЕМХЕ ТСМЙЖХХ system ЙЮЙ ЯОЕЖХЮКЭМНЕ ДЕИЯРБХЕ Х ДНЯРЮРНВМН КНБНЙ, ВРНАШ МЕ БШОНКМЪРЭ НАНКНВЙС (ХКХ ДПСЦНИ ХМРЕПОПЕРЮРНП ЙНЛЮМД) Я ОСЯРНИ ЙНЛЮМДНИ. оНЩРНЛС ДКЪ gawk ЩРЮ ХДХНЛЮ МЕ РНКЭЙН ОНКЕГМЮ, МН Х ЩТТЕЙРХБМЮ. еЯКХ ЩРНР ЛЕРНД АСДЕР ПЮАНРЮРЭ Я ДПСЦХЛХ ПЕЮКХГЮЖХЪЛХ awk, ЛНФМН МЕ ЯРПЕЛХРЭЯЪ ХГАЕЦЮРЭ МЕ МЕНАУНДХЛНЦН БШГНБЮ НАНКНВЙХ. (дПСЦХЕ ПЕЮКХГЮЖХХ ЛНЦСР РНКЭЙН НЯБНАНФДЮРЭ АСТЕП, ЯБЪГЮММШИ ЯН ЯРЮМДЮПРМШЛ БШБНДНЛ, Ю МЕ БЕЯЭ АСТЕПХГНБЮММШИ БШБНД.)

еЯКХ ДСЛЮРЭ Н РНЛ, ВРН УНВЕР ОПНЦПЮЛЛХЯР, ХЛЕЕР ЯЛШЯК, ВРНАШ ЯХЯРЕЛЮ ОНДЦНМЪКЮ БЯЕ НРКНФЕММШЕ БШБНДШ. яКЕДСЧЫЮЪ ОПНЦПЮЛЛЮ:

BEGIN -
print "first print" system("echo system echo") print "second print" ""

ДНКФМЮ МЮОЕВЮРЮРЭ

first print system echo second print

Ю МЕ

system echo first print second print

еЯКХ awk МЕ НВХЯРХКЮ (flush) ЯБНХ АСТЕПЮ ДН БШГНБЮ system, БШ СБХДХРЕ ОНЯКЕДМХИ (МЕФЕКЮРЕКЭМШИ) БШБНД.

12.5 тСМЙЖХХ ДКЪ ДЕИЯРБХИ Я НРЛЕРЙЮЛХ БПЕЛЕМХ

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

нАШВМНЕ МЮГМЮВЕМХЕ awk-ОПНЦПЮЛЛ ЯНЯРНХР Б НАПЮАНРЙЕ ПЕЦХЯРПЮЖХНММШУ ТЮИКНБ Я ХМТНПЛЮЖХЕИ Н БПЕЛЕМХ БШДЮВХ МЕЙНРНПШУ ГЮОХЯЕИ. лМНЦХЕ ПЕЦХЯРПЮЖХНММШЕ ОПНЦПЮЛЛШ ГЮОХЯШБЮЧР НРЛЕРЙХ БПЕЛЕМХ Б ТНПЛЮРЕ ЯКСФАШ БПЕЛЕМХ, ЙНРНПШИ ЯНДЕПФХР ВХЯКН ЯЕЙСМД, ХЯРЕЙЬХУ ОНЯКЕ НОПЕДЕКЕММНЦН ЛНЛЕМРЮ. б ЯХЯРЕЛЮУ POSIX ЩРН ВХЯКН ЯЕЙСМД ОНЯКЕ ОНКМНВХ МЮ 1 ъМБЮПЪ 1970, UTC. вРНАШ НАКЕЦВХРЭ НАПЮАНРЙС РЮЙХУ ТЮИКНБ Х БШДЮБЮРЭ СДНАМШЕ НРВЕРШ, gawk ОПЕДКЮЦЮЕР ДБЕ ТСМЙЖХХ ДКЪ ПЮАНРШ Я ЛЕРЙЮЛХ БПЕЛЕМХ. нМХ НАЕ ОПЕДЯРЮБКЪЧР ПЮЯЬХПЕМХЕ gawk; ХУ МЕР МХ Б ЯРЮМДЮПРЕ POSIX, МХ Б ДПСЦХУ ХГБЕЯРМШУ БЕПЯХЪУ awk. мЕНАЪГЮРЕКЭМШЕ ОЮПЮЛЕРПШ ГЮЙКЧВЕМШ Б ЙБЮДПЮРМШЕ ЯЙНАЙХ ("[" and "]").

systime()

щРЮ ТСМЙЖХЪ БНГБПЮЫЮЕР РЕЙСЫЕЕ БПЕЛЪ ЙЮЙ ВХЯКН ЯЕЙСМД Я ЯХЯРЕЛМНЦН ЛНЛЕМРЮ. б ЯХЯРЕЛЮУ POSIX ЩРН --- ВХЯКН ЯЕЙСМД Я ОНКСМНВХ 1 ъМБЮПЪ 1970, UTC. нМН ЛНФЕР НРКХВЮРЭЯЪ НР ДПСЦХУ ЯХЯРЕЛ.

strftime([format [, timestamp]])

щРЮ ТСМЙЖХЪ БНГБПЮЫЮЕР ЖЕОНВЙС . нМЮ ОНДНАМЮ ТСМЙЖХХ Я РЕЛ ФЕ ХЛЕМЕЛ Б ANSI C. бПЕЛЪ, СЙЮГЮММНЕ Б timestamp, БШДЮЕРЯЪ Б ЩРНИ ЖЕОНВЙЕ ЯНЦКЮЯМН ТНПЛЮРС Б format. timestamp ХЛЕЕР РНР ФЕ ТНПЛЮР, ВРН Х ГМЮВЕМХЕ, БНГБПЮЫЮЕЛНЕ ТСМЙЖХЕИ systime. еЯКХ ЮПЦСЛЕМР timestamp ОПХЯСРЯРБСЕР, gawk ХЯОНКЭГСЕР ЙЮЙ НРЛЕРЙС БПЕЛЕМХ РЕЙСЫЕЕ БПЕЛЪ ДМЪ. еЯКХ НРЯСРЯРБСЕР ЮПЦСЛЕМР format, РН ХЯОНКЭГСЕРЯЪ "%a %b %d %H:%M:%S %Z %Y". щРЮ ТНПЛЮРМЮЪ ЯРПНЙЮ БШДЮЕР ПЕГСКЭРЮР (ОНВРХ) ЩЙБХБЮКЕМРМШИ ПЕГСКЭРЮРС СРХКХРШ date. (бЕПЯХХ gawk ДН 3.0 РПЕАНБЮКХ ЮПЦСЛЕМР format.) тСМЙЖХЪ systime ДНОСЯЙЮЕР ЯПЮБМЕМХЕ НРЛЕРЙХ БПЕЛЕМХ ХГ ПЕЦХЯРПЮЖХНММНЦН ТЮИКЮ Я РЕЙСЫХЛ БПЕЛЕМЕЛ. б ВЮЯРМНЯРХ, КЕЦЙН НОПЕДЕКХРЭ, ЙЮЙ ДЮБМН МЕЙНРНПЮЪ ГЮОХЯЭ АШКЮ ЯДЕКЮМЮ. нМЮ РЮЙФЕ ОНГБНКЪЕР БЮЛ ЯДЕКЮРЭ ПЕЦХЯРПЮЖХНММСЧ ГЮОХЯЭ, ХЯОНКЭГСЪ ТНПЛЮР "seconds since the epoch". тСМЙЖХЪ strftime ОНГБНКЪЕР КЕЦЙН ОЕПЕДЕКЮРЭ НРЛЕРЙС БПЕЛЕМХ Б СДНАМСЧ ДКЪ ВЕКНБЕЙЮ ТНПЛС. щРН ОН ЯБНЕИ ОПХПНДЕ ЯУНДМН Я ТСМЙЖХЕИ sprintf (яЛ. ПЮГДЕК 12.3 [бЯРПНЕММШЕ ТСМЙЖХХ ДКЪ ЛЮМХОСКЪЖХИ Я ЖЕОНВЙЮЛХ, ЯРП. 137), Б РНЛ, ВРН НМЮ ЙНОХПСЕР АСЙБЮКЭМН МЕТНПЛЮРМШЕ ЯОЕЖХЮКЭМШЕ ЯХЛБНКШ Б БНГБПЮЫЮЕЛСЧ ЖЕОНВЙС, ОНДЯРЮБКЪЪ ДЮРС Х БПЕЛЪ ДКЪ ТНПЛЮРМНИ НАПЮАНРЙХ Б ТНПЛЮРМСЧ ЖЕОНВЙС.

strftime ЦЮПЮМРХПСЕР ОН ЯРЮМДЮПРС ANSI C ОНДДЕПФЙС ЯКЕДСЧЫХУ ЯОЕЖХТХЙЮЖХИ ТНПЛЮРЮ ДЮРШ:

%a лЕЯРМШЕ ЯНЙПЮЫЕМХЪ МЮГБЮМХИ ДМЕИ МЕДЕКХ.
%A оНКМШЕ ЛЕЯРМШЕ МЮХЛЕМНБЮМХЪ ДМЕИ МЕДЕКХ.
%b лЕЯРМШЕ ЯНЙПЮЫЕМХЪ МЮГБЮМХИ ЛЕЯЪЖЕБ.
%B оНКМШЕ ЛЕЯРМШЕ МЮГБЮМХЪ ЛЕЯЪЖЕБ.
%c лЕЯРМНЕ "ОПХМЪРНЕ" ОПЕДЯРЮБКЕМХЕ ДЮРШ Х БПЕЛЕМХ.
%d дЕМЭ ЛЕЯЪЖЮ ЙЮЙ ДЕЯЪРХВМНЕ ВХЯКН (01-31).
%H вЮЯ ЙЮЙ ДЕЯЪРХВМНЕ ВХЯКН (24-ВЮЯ. ВЮЯШ) (00-23).
%I вЮЯ ЙЮЙ ДЕЯЪРХВМНЕ ВХЯКН (12-ВЮЯ. ВЮЯШ) (01-12).
%j дЕМЭ ЦНДЮ ЙЮЙ ДЕЯЪРХВМНЕ ВХЯКН (001-366).
%m лЕЯЪЖ ЙЮЙ ДЕЯЪРХВМНЕ ВХЯКН (01-12).
%M лХМСРЮ ЙЮЙ ДЕЯЪРХВМНЕ ВХЯКН (00-59).
%p лЕЯРМШИ ЩЙБХБЮКЕМР ДКЪ НАНГМЮВЕМХЪ  AM/PM ДКЪ 12-ВЮЯ. ВЮЯНБ.
%S яЕЙСМДШ ЙЮЙ ДЕЯЪРХВМНЕ ВХЯКН (00-60).5
%U мНЛЕП МЕДЕКХ Б ЦНДС (ОЕПБНЕ бНЯЙПЕЯЕМЭЕ ЙЮЙ ОЕПБШИ ДЕМЭ МЕДЕКХ НДХМ)
   ЙЮЙ ДЕЯЪРХВМНЕ ВХЯКН (00-53).
%w дЕМЭ МЕДЕКХ ЙЮЙ ДЕЯЪРХВМНЕ ВХЯКН (0-6). бНЯЙПЕЯЕМЭЕ ЙЮЙ ДЕМЭ 0.
%W мНЛЕП МЕДЕКХ Б ЦНДС (ОЕПБШИ оНМЕДЕКЭМХЙ ЙЮЙ ОЕПБШИ ДЕМЭ МЕДЕКХ 1)
   ЙЮЙ ДЕЯЪРХВМНЕ ВХЯКН (00-53).
%x лЕЯРМНЕ "ОПХМЪРНЕ" ОПЕДЯРЮБКЕМХЕ ДЮРШ.
%X кНЙЮКЭМНЕ "ОПХМЪРНЕ" ОПЕДЯРЮБКЕМХЕ БПЕЛЕМХ.
%y цНД АЕГ ЯРНКЕРХИ ЙЮЙ ДЕЯЪРХВМНЕ ВХЯКН (00-99).
%Y цНД ЯН ЯРНКЕРХЪЛХ ЙЮЙ ДЕЯЪРХВМНЕ ВХЯКН (e.g., 1995).
%Z хЛЪ ВЮЯНБНЦН ОНЪЯЮ ХКХ ЕЦН ЯНЙПЮЫЕМХЕ ХКХ ОСЯРН, ЕЯКХ ГНМЮ МЕ СЙЮГЮМЮ.
%% кХРЕПЮК `%'.

еЯКХ ЯОЕЖХТХЙЮРНП ЙНМБЕПЯХХ НРКХВЕМ НР СЙЮГЮММШУ, ПЕГСКЭРЮР МЕ НОПЕДЕКЕМ.

6 мЕТНПЛЮКЭМН, "КНЙЮКЭМШИ" НГМЮВЮЕР ЦЕНЦПЮТХВЕЯЙНЕ ЛЕЯРН, ЦДЕ ОПНЦПЮЛЛЮ ДНКФМЮ ХЯОНКМЪРЭЯЪ. мЮОПХЛЕП, НАШВМШИ ЯОНЯНА ЯНЙПЮЫЕМХЪ ДЮРШ September 4, 1991 Б яНЕДХМЕММШУ ьРЮРЮУ ЕЯРЭ "9/4/91". нДМЮЙН Б ЛМНЦХУ ЯРПЮМЮУ еБПНОШ ЩРН АСДЕР "4.9.91". рЮЙ, ЯОЕЖХТХЙЮЖХЪ `%x' Б "US" ПЕЦХНМЕ ЛНФЕР БШДЮБЮРЭ `9/4/91', Б РН БПЕЛЪ ЙЮЙ Б ПЕЦХНМЕ "EUROPE" НМЮ ЛНФЕР БШДЮБЮРЭ `4.9.91'. яРЮМДЮПР ANSI C НОПЕДЕКЪЕР ОН СЛНКВЮМХЧ ПЕЦХНМ "C" ЙЮЙ РХОХВМШИ ДКЪ АНКЭЬХМЯРБЮ ОПНЦПЮЛЛХЯРНБ яХ.

5 хГПЕДЙЮ ХЛЕЧРЯЪ ЛХМСРШ Б ЦНДС Я МЕЯЙНКЭЙХЛХ ЯЕЙСМДЮЛХ, МЕ АНКЭЬЕ 60.

6 щРН ОПНХЯУНДХР ОНРНЛС, ВРН ANSI C НЯРЮБКЪЕР МЕНОПЕДЕКЕММШЛ ОНБЕДЕМХЕ яХ БЕПЯХХ strftime, ЕЯКХ НМЮ РЮЛ ЕЯРЭ. нАШВМН ЯОЕЖХТХЙЮРНП ЙНМБЕПЯХХ ХКХ МЕ ОНЪБКЪЕРЯЪ Б БНГБПЮЫЮЕЛНИ ЖЕОНВЙЕ, ХКХ ОНЪБКЪЕРЯЪ АСЙБЮКЭМН.

оСАКХВМЮЪ яХ-БЕПЯХЪ strftime ОНЯРЮБКЪЕРЯЪ c gawk ДКЪ ЯХЯРЕЛ, ЙНРНПШЕ ЕЫЕ МЕ ОНКМНЯРЭЧ ЯНЦКЮЯНБЮМШ Я ANSI. еЯКХ ЩРЮ БЕПЯХЪ ХЯОНКЭГНБЮМЮ ДКЪ ЙНЛОХКЪЖХХ gawk (ЯЛ. ОПХКНФЕМХЕ B [сЯРЮМНБЙЮ gawk], ЯРП. 279), РН ДНЯРСОМШ ЯКЕДСЧЫХЕ ДНОНКМХРЕКЭМШЕ ЯОЕЖХТХЙЮЖХХ ТНПЛЮРЮ:

%D щЙБХБЮКЕМР ЯОЕЖХТХЙЮЖХХ `%m/%d/%y'.
%e дЕМЭ ЛЕЯЪЖЮ, ОНОНКМЕММШИ ОПНАЕКЮЛХ Б ЯКСВЮЕ НДМНИ ЖХТПШ.
%h щЙБХБЮКЕМР ДКЪ `%b'.
%n яХЛБНК МНБНИ ЯРПНЙХ  (ASCII LF).
%r щЙБХБЮКЕМР ДКЪ  `%I:%M:%S %p'.
%R щЙБХБЮКЕМР ДКЪ `%H:%M'.
%T щЙБХБЮКЕМР ДКЪ  `%H:%M:%S'.
%t яХЛБНК tab.
%k вЮЯШ (24-ВЮЯ. ВЮЯШ) ЙЮЙ ДЕЯЪРХВМНЕ ВХЯКН (0-23). нДМЮ ЖХТПЮ ДНОНКМЪЕРЯЪ
   ОПНАЕКНЛ.
%l вЮЯШ (12-ВЮЯ. ВЮЯШ) ЙЮЙ ДЕЯЪРХВМНЕ ВХЯКН (1-12). нДМЮ ЖХТПЮ ДНОНКМЪЕРЯЪ
   ОПНАЕКНЛ.
%C яРНКЕРХЪ ЙЮЙ ВХЯКН ЛЕФДС  00 Х 99.
%u дЕМЭ МЕДЕКХ ЙЮЙ ДЕЯЪРХВМНЕ ВХЯКН [1 (оНМЕДЕКЭМХЙ)-7].
%V мНЛЕП МЕДЕКХ Б ЦНДС (ОЕПБШИ ОНМЕДЕКЭМХЙ ЙЮЙ ОЕПБШИ ДЕМЭ МЕДЕКХ НДХМ) ЙЮЙ
   ДЕЯЪРХВМНЕ ВХЯКН (01-53). лЕРНД БШВХЯКЕМХЪ МНЛЕПЮ МЕДЕКХ СЙЮГЮМ Б ISO 8601
   (Ю ХЛЕММН: ЕЯКХ МЕДЕКЪ, ЯНДЕПФЮЫЮЪ 1 ъМБЮПЪ, ХЛЕЕР 4 ХКХ АНКЕЕ ДМЕИ Б
   МНБНЛ ЦНДС, РН НМЮ --- МЕДЕКЪ 1, Б ОПНРХБМНЛ ЯКСВЮЕ ЩРН МЕДЕКЪ  53 ОПНЬКНЦН
   ЦНДЮ, Х РНКЭЙН ЯКЕДСЧЫЮЪ МЕДЕКЪ ЕЯРЭ МЕДЕКЪ 1).
%G цНД ЯН ЯРНКЕРХЪЛХ ЯНЦКЮЯМН ЯВЕРС МЕДЕКЭ ОН ISO ЙЮЙ ДЕЯЪРХВМНЕ ВХЯКН.
   мЮОПХЛЕП, 1 ЪМБЮПЪ 1993 КЕФХР Б МЕДЕКЕ  53 ЦНДЮ 1992. оН ISO ЩРН ЕЫЕ ЦНД
  1992, УНРЪ ТЮЙРХВЕЯЙХ СФЕ 1993. оНДНАМН ЩРНЛС, 31 дЕЙЮАПЪ 1973 КЕФХР Б
  Б МЕДЕКЕ 1 ЦНДЮ 1974. яНЦКЮЯМН МСЛЕПЮЖХХ МЕДЕКЭ ОН ISO, ЩРН СФЕ
  ЦНД is 1974, УНРЪ ТЮЙРХВЕЯЙХ ЕЫЕ 1973.
%g цНД АЕГ ЯРНКЕРХИ ОН МСЛЕПЮЖХХ МЕДЕКЭ Б ISO ЙЮЙ ДЕЯЪРХВМНЕ ВХЯКН (00-99).

%Ec %EC %Ex %Ey %EY %Od %Oe %OH %OI %Om %OM %OS %Ou %OU %OV %Ow %OW %Oy

щРН "ЮКЭРЕПМЮРХБМШЕ ОПЕДЯРЮБКЕМХЪ" ДКЪ ЯОЕЖХТХЙЮЖХИ, ЙНРНПШЕ ХЯОНКЭГСЧР РНКЭЙН БРНПСЧ АСЙБС (`%c', `%C', Х Р.Д.). нМХ ПЮЯОНГМЮЧРЯЪ Х ХЯОНКЭГСЕРЯЪ ХУ МНПЛЮКЭМШЕ ОПЕДЯРЮБКЕМХЪ.7 (щРН --- ЯПЕДЯРБН ЯНЦКЮЯНБЮМХЪ Я СРХКХРЮЛХ POSIX ДКЪ НАПЮАНРЙХ ДЮР.)

%v дЮРЮ Б ТНПЛЮРЕ VMS (e.g., 20-JUN-1991). %z гНММНЕ ЯЛЕЫЕМХЕ БПЕЛЕМХ Б ТНПЛЮРЕ +HHMM format (МЮОПХЛЕП, ЩРНР ТНПЛЮР МЕНАУНДХЛ ДКЪ ОНКСВЕМХЪ ГЮЦНКНБЙНБ ДЮР RFC-822/RFC-1036 date headers). щРНР ОПХЛЕП ЕЯРЭ ПЕЮКХГЮЖХЪ Б awk ЯПЕДЯРБ НАПЮАНРЙХ ДЮР Б POSIX. мНПЛЮКЭМН СРХКХРШ ДЮР ОЕВЮРЮЧР РЕЙСЫСЧ ДЮРС Х БПЕЛЪ Б УНПНЬН ХГБЕЯРМНЛ ТНПЛЮРЕ. мН ЕЯКХ БШ ДЮДХРЕ Б МХУ ЮПЦСЛЕМР, МЮВХМЮЧЫХИЯЪ Я `+', ДЮРЮ ЯЙНОХПСЕР МЕТНПЛЮРМШИ ЯХЛБНК ЯОЕЖХТХЙЮЖХХ Х АСДЕР ХМРЕПОПЕРХПНБЮРЭ РЕЙСЫЕЕ БПЕЛЪ ЯННРБЕРЯРБЕММН ТНПЛЮРМНЛС ЯОЕЖХТХЙЮРНПС Б ЖЕОНВЙЕ.

мЮОПХЛЕП:

$ date '+Today is %A, %B %d, %Y.'
a Today is Thursday, July 11, 1991.

гДЕЯЭ ХЯОНКЭГНБЮМЮ БЕПЯХЪ gawk ДКЪ СРХКХР ДЮММШУ. нМЮ ХЛЕЕР НАНКНВЕВМСЧ "ДНАЮБЙС" ДКЪ НАПЮАНРЙХ ОЮПЮЛЕРПЮ `-u', ЙНРНПШИ РПЕАСЕР, ВРНАШ ДЮРЮ БНЯОПХМХЛЮКЮЯЭ РЮЙ, АСДРН БПЕЛЕММЮЪ ГНМЮ СЯРЮМНБКЕМЮ МЮ UTC.

#! /bin/sh # # date --- ЮООПНЙЯХЛХПСЕР P1003.2 'date' command
case $1 in -u) TZ=GMT0 # use UTC
export TZ shift ;; esac
gawk 'BEGIN -
format = "%a %b %d %H:%M:%S %Z %Y" exitval = 0
if (ARGC ? 2)
exitval = 1 else if (ARGC == 2) -
format = ARGV[1] if (format ~ /^"+/)
format = substr(format, 2) # remove leading + "" print strftime(format)&
 exit exitval ""' "$@"

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

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

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

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