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

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

8. нАПЮГЖШ Х ДЕИЯРБХЪ

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

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

8.1 щКЕЛЕМРШ НАПЮГЖНБ

нАПЮГЖШ Б awk СОПЮБКЪЧР БШОНКМЕМХЕЛ ОПЮБХК: ОПЮБХКН БШОНКМЪЕРЯЪ, ЙНЦДЮ ЕЦН НАПЮГЕЖ ЯННРБЕРЯРБСЕР РЕЙСЫЕИ БУНДМНИ ГЮОХЯХ. б ЩРНЛ ПЮГДЕКЕ ЦНБНПХРЯЪ БЯЕ Н РНЛ, ЙЮЙ ОХЯЮРЭ НАПЮГЖШ.

8.1.1 рХОШ НАПЮГЖНБ

б МЮВЮКН ЯРПЮМХЖШ
оПХБЕДЕЛ НАГНП РХОНБ НАПЮГЖНБ, ХЯОНКЭГСЕЛШУ Б awk.

/regular expression/

пЕЦСКЪПМНЕ БШПЮФЕМХЕ ЛНФЕР ЯКСФХРЭ НАПЮГЖНЛ. нМ ЯННРБЕРЯРБСЕР, ЙНЦДЮ РЕЙЯР БУНДМНИ ГЮОХЯХ НРБЕВЮЕР ПЕЦСКЪПМНЛС БШПЮФЕМХЧ. (яЛ. ЦКЮБС 4 [пЕЦСКЪПМШЕ БШПЮФЕМХЪ], ЯРП. 23.)

expression

нРДЕКЭМНЕ БШПЮФЕМХЕ. нМН ЯННРБЕРЯРБСЕР, ЕЯКХ ЕЦН ГМЮВЕМХЕ МЕ МНКЭ (Б ЯКСВЮЕ ВХЯКЮ) ХКХ МЕ ОСЯРН (Б ЯКСВЮЕ ЖЕОНВЙХ) (яЛ. ПЮГДЕК 8.1.3 [бШПЮФЕМХЪ ЙЮЙ НАПЮГЖШ], ЯРП. 98.)

pat1, pat2

дБЮ НАПЮГЖЮ, ПЮГДЕКЕММШЕ ГЮОЪРНИ, СЙЮГШБЮЧР ДХЮОЮГНМ ГЮОХЯЕИ. дХЮОЮГНМ БЙКЧВЮЕР МЮВЮКЭМСЧ ГЮОХЯЭ, ЯННРБЕРЯРБСЧЫСЧ pat1, Х ЙНМЕВМСЧ ГЮОХЯЭ, ЯННРБЕРЯРБСЧЫСЧ pat2. (яЛ. ПЮГДЕК 8.1.4 [сЙЮГЮМХЕ ДХЮОЮГНМНБ ГЮОХЯЕИ НАПЮГЖЮЛХ], ЯРП. 99.)

BEGIN END

яОЕЖХЮКЭМШЕ НАПЮГЖШ ДКЪ МЮВЮКЭМШУ Х ГЮЙКЧВХРЕКЭМШУ ДЕИЯРБХИ awk-ОПНЦПЮЛЛШ. (яЛ. ПЮГДЕК 8.1.5 [яОЕЖХЮКЭМШЕ НАПЮГЖШ BEGIN Х END], ЯРП. 100.)

empty

оСЯРНИ НАПЮГЕЖ ЯННРБЕРЯРБСЕР ЙЮФДНИ БУНДМНИ ГЮОХЯХ. (яЛ. ПЮГДЕК 8.1.6 [оСЯРНИ НАПЮГЕЖ], ЯРП. 102.)

8.1.2 пЕЦСКЪПМШЕ БШПЮФЕМХЪ ЙЮЙ НАПЮГЖШ

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

лШ СОНРПЕАКЪКХ ПЕЦСКЪПМШЕ БШПЮФЕМХЪ ЙЮЙ НАПЮГЖШ Я ОЕПБШУ ОПХЛЕПНБ. щРНР РХО НАПЮГЖНБ ЕЯРЭ ОПНЯРН ЙНМЯРЮМРЮ regexp Б ВЮЯРХ ОПЮБХКЮ, НРБЕДЕММНИ ДКЪ НАПЮГЖЮ. хУ ЯЛШЯК ГЮЙКЧВЮЕРЯЪ Б `$0 ~ /pattern/'. нАПЮГЕЖ ЯННРБЕРЯРБСЕР, ЕЯКХ БУНДМЮЪ ГЮОХЯЭ ЯННРБЕРЯРБСЕР regexp.

 мЮОПХЛЕП:

/foo--bar--baz/ - buzzwords++ "" END - print buzzwords, "buzzwords seen" ""

8.1.3 бШПЮФЕМХЪ ЙЮЙ НАПЮГЖШ

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

йЮФДНЕ БШПЮФЕМХЕ awk ЛНФЕР АШРЭ НАПЮГЖНЛ awk. рНЦДЮ НАПЮГЕЖ ЯННРБЕРЯРБСЕР, ЕЯКХ ГМЮВЕМХЕ БШПЮФЕМХЪ МЕ МНКЭ (Б ЯКСВЮЕ ВХЯКЮ) ХКХ МЕ ОСЯРН (Б ЯКСВЮЕ ЖЕОНВЙХ). бШПЮФЕМХЕ ОЕПЕ БШВХЯКЪЕРЯЪ ЙЮФДШИ ПЮГ, ЙНЦДЮ ОПЮБХКН ОПНБЕПЪЕРЯЪ ДКЪ МНБНИ БУНДМНИ ГЮОХЯХ. еЯКХ Б БШПЮФЕМХХ ХЯОНКЭГСЧРЯЪ ОНКЪ, РЮЙХЕ ЙЮЙ $1, ГМЮВЕМХЕ ГЮБХЯХР МЕОНЯПЕДЯРБЕММН НР РЕЙЯРЮ МНБНИ БУНДМНИ ГЮОХЯХ; Б ОПНРХБМНЛ ЯКСВЮЕ НМН ГЮБХЯХР РНКЭЙН НР РНЦН, ВРН ОПНХГНЬКН ДН ЯХУ ОНП ОПХ БШОНКМЕМХХ awk-ОПНЦПЮЛЛШ, МН БЯЕ ЕЫЕ ЛНФЕР АШРЭ ОНКЕГМШЛ.

яЮЛШЛ НАШВМШЛ РХОНЛ БШПЮФЕМХИ, ХЯОНКЭГСЕЛШУ Б ЙЮВЕЯРБЕ НАПЮГЖЮ, ЯКСФЮР БШПЮФЕМХЪ ЯПЮБМЕМХЪ, ЯНДЕПФЮЫХЕ НОЕПЮРНПШ ЯПЮБМЕМХЪ, НОХЯЮММШЕ Б ПЮГДЕКЕ 7.10 [рХОШ ОЕПЕЛЕММШУ Х БШПЮФЕМХЪ ЯПЮБМЕМХЪ], ЯРП. 88.

яННРБЕРЯРБХЪ Х МЕЯННРБЕРЯРБХЪ Я regexp РЮЙФЕ ОПЕДЯРЮБКЪЧР НАШВМН СОНРПЕАКЪЕЛШЕ БШПЮФЕМХЪ. кЕБШИ НОЕПЮМД Б НОЕПЮРНПЮУ `~' Х `!~' ЕЯРЭ ЖЕОНВЙЮ. оПЮБШИ НОЕПЮМД ЕЯРЭ ХКХ ОНЯРНЪММНЕ ПЕЦСКЪПМНЕ БШПЮФЕМХЕ, ГЮЙКЧВЕММНЕ Б ЯКЕЬХ (/regexp/) ХКХ КЧАНЕ БШПЮФЕМХЕ, ЯРПНЙНБНЕ ГМЮВЕМХЪ ЙНРНПНЦН ХЯОНКЭГСЕРЯЪ ЙЮЙ ДХМЮЛХВЕЯЙНЕ ПЕЦСКЪПМНЕ БШПЮФЕМХЕ (ЯЛ. ПЮГДЕК 4.7 [хЯОНКЭГНБЮМХЕ ДХМЮЛХВЕЯЙХУ Regexps], ЯРП. 35).

б ЯКЕДСЧЫЕЛ ОПХЛЕПЕ ОЕВЮРЮЕРЯЪ БРНПНЕ ОНКЕ ЙЮФДНИ БУНДМНИ ГЮОХЯХ , С ЙНРНПНИ ОЕПБНЕ ОНКЕ ЕЯРЭ Б РНВМНЯРХ `foo'.

$ awk '$1 == "foo" - print $2 ""' BBS-list

(гДЕЯЭ МЕР БШУНДЮ, ОНЯЙНКЭЙС Б BBS МЕР ЩЙПЮМНБ Я ХЛЕМЕЛ "foo".) б НРКХВХЕ НР ЯННРБЕРЯРБХЪ ЯКЕДСЧЫЕЦН ПЕЦСКЪПМНЦН Л БШПЮФЕМХЪ, ЙНРНПНЕ БШАХПЮЕР БЯЪЙСЧ ГЮОХЯЭ Я ОЕПБШЛ ОНКЕЛ, ЯНДЕПФЮЫХЛ `foo':

$ awk '$1 ~ /foo/ - print $2 ""' BBS-list

a 555-1234 a 555-6699 a 555-6480 a 555-2127

аСКЕБЯЙХЕ БШПЮФЕМХЪ РЮЙФЕ НАШВМН ХЯОНКЭГСЧРЯЪ Б ЙЮВЕЯРБЕ НАПЮГЖНБ. яННРБЕРЯРБСЕР КХ НАПЮГЕЖ БУНДМНИ ГЮОХЯХ ГЮБХЯХР НР РНЦН, ЯННРБЕРЯРБСЧР КХ ДПСЦ ДПСЦС ХУ ОНДБШПЮФЕМХЪ. мЮОПХЛЕП, РЮЙЮЪ ЙНЛЮМДЮ ОЕВЮРЮЕР БЯЕ ГЮОХЯХ ХГ `BBS-list', ЙНРНПШЕ ЯНДЕПФЮР БЛЕЯРЕ `2400' Х `foo':

$ awk '/2400/ && /foo/' BBS-list
a fooey 555-1234 2400/1200/300 B

ю ЯКЕДСЧЫЮЪ ЙНЛЮМДЮ ОЕВЮРЮЕР БЯЕ ГЮОХЯХ ХГ `BBS-list', ЙНРНПШЕ ЯНДЕПФЮР ХКХ `2400' ХКХ `foo', ХКХ Х РН Х ДПСЦНЕ:

$ awk '/2400/ ---- /foo/' BBS-list
a alpo-net 555-3412 2400/1200/300 A
a bites 555-1675 2400/1200/300 A
a fooey 555-1234 2400/1200/300 B
a foot 555-6699 1200/300 B
a macfoo 555-6480 1200/300 A
a sdace 555-3430 2400/1200/300 A
a sabafoo 555-2127 1200/300 C

яКЕДСЧЫЮЪ ЙНЛЮМДЮ ОЕВЮРЮЕР БЯЕ ГЮОХЯХ ХГ  `BBS-list', 
ЙНРНПШЕ МЕ ЯНДЕПФЮР ЖЕОНВЙХ `foo':

$ awk '! /foo/' BBS-list
a aardvark 555-5553 1200/300 B
a alpo-net 555-3412 2400/1200/300 A
a barfly 555-7685 1200/300 A
a bites 555-1675 2400/1200/300 A
a camelot 555-0542 300 C
a core 555-2912 1200/300 C
a sdace 555-3430 2400/1200/300 A

оНДБШПЮФЕМХЪ АСКЕБЯЙНЦН НОЕПЮРНПЮ Б НАПЮГЖЕ ЛНЦСР АШРЭ ОНЯРНЪММШЛХ ПЕЦСКЪПМШЛХ БШПЮФЕМХЪЛХ, ЯПЮБМЕМХЪЛХ ХКХ КЧАШЛХ ДПСЦХЛХ awk-БШПЮФЕМХЪЛХ. нАПЮГЖШ ДКЪ ДХЮОЮГНМНБ МЕ ЪБКЪЧРЯЪ БШПЮФЕМХЪЛХ Х МЕ ЛНЦСР ОНЪБХРЭЯЪ БМСРПХ АСКЕБЯЙХУ НАПЮГЖНБ. рНВМН РЮЙФЕ ЯОЕЖХЮКЭМШЕ НАПЮГЖШ BEGIN Х END, ЙНРНПШЕ МХЙНЦДЮ МЕ ЯНОНЯРЮБКЪЧРЯЪ МХ НДМНИ БУНДМНИ ГЮОХЯХ, МЕ ЕЯРЭ БШПЮФЕМХЪ Х МЕ ЛНЦСР ОНЪБХРЭЯЪ БМСРПХ АСКЕБЯЙХУ БШПЮФЕМХИ. йНМЯРЮМРЮ regexp ЙЮЙ НАПЮГЕЖ РЮЙФЕ ОПЕДЯРЮБКЪЕР ЯОЕЖХЮКЭМШИ ЯКСВЮИ БШПЮФЕМХЪ-НАПЮГЖЮ. /foo/ ЙЮЙ БШПЮФЕМХЕ ХЛЕЕР ГМЮВЕМХЕ НДХМ, ЕЯКХ `foo' ОНЪБХРЯЪ Б РЕЙСЫЕИ БУНДМНИ ГЮОХЯХ; РЮЙ, ЙЮЙ НАПЮГЕЖ, /foo/ ЯННРБЕРЯРБСЕР КЧАНИ ГЮОХЯХ, ЯНДЕПФЮЫЕИ `foo'.

8.1.4 сЙЮГЮМХЕ ДХЮОЮГНМНБ ГЮОХЯЕИ Я ОНЛНЫЭЧ НАПЮГЖНБ

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

нАПЮГЕЖ ДКЪ ДХЮОЮГНМЮ НАПЮГСЕРЯЪ ДБСЛЪ НАПЮГЖЮЛХ, ПЮГДЕКЕММШЛХ ГЮОЪРНИ, БХДЮ `begpat, endpat'. нМ НОПЕДЕКЪЕР ДХЮОЮГНМ ОНЯКЕДНБЮРЕКЭМШУ БУНДМШУ ГЮОХЯЕИ. оЕПБШИ НАПЮГЕЖ, begpat, НОПЕДЕКЪЕР МЮВЮКН ДХЮОЮГНМЮ, Ю БРНПНИ, endpat, НОПЕДЕКЪЕР ЕЦН ЙНМЕЖ.

мЮОПХЛЕП,

awk '$1 == "on", $1 == "off"' ОЕВЮРЮЕР ЙЮФДСЧ ГЮОХЯЭ БМСРПХ ОЮП

`on'/`off', БЙКЧВЮЪ ЦПЮМХВМШЕ ЯКСВЮХ.

нАПЮГЕЖ ДХЮОЮГНМЮ МЮВХМЮЕР ПЮАНРС ЯПЮБМЕМХЕЛ begpat Я ЙЮФДНИ БУНДМНИ ГЮОХЯЭЧ; ЕЯКХ ГЮОХЯЭ ЯННРБЕРЯРБСЕР begpat, НАПЮГЕЖ ДХЮОЮГНМЮ ОЕПЕУНДХР Б ЯНЯРНЪМХЕ "on", Ю ГЮОХЯЭ ЯВХРЮЕРЯЪ ЯННРБЕРЯРБСЧЫЕИ ДХЮОЮГНМС. оНЙЮ НЯРЮЕРЯЪ ЯНЯРНЪМХЕ "on", НАПЮГЕЖ ЮБРНЛЮРХВЕЯЙХ ЯННРБЕРЯРБСЕР ЙЮФДНИ ОПНВРЕММНИ ГЮОХЯХ. рЮЙФЕ ЙЮФДЮЪ ВХРЮЕЛЮЪ ГЮОХЯЭ ОПНБЕПЪЕРЯЪ МЮ ЯННРБЕРЯРБХЕ Я endpat; ЕЯКХ НМН ХЛЕЕР ЛЕЯРН, НАПЮГЕЖ ДХЮОЮГНМЮ ОЕПЕУНДХР НОЪРЭ Б ЯНЯРНЪМХЕ "off" ДКЪ ЯКЕДСЧЫХУ ГЮОХЯЕИ, Х ГЮРЕЛ НОЪРЭ МЮВХМЮЕРЯЪ ОПНБЕПЙЮ МЮ begpat ДКЪ ЙЮФДНИ ГЮОХЯХ.

гЮОХЯЭ, ЙНРНПЮЪ БЙКЧВЮЕР НАПЮГЕЖ ДХЮОЮГНМЮ, Х РЮ, ЙНРНПЮЪ ЕЦН БШЙКЧВЮЕР, НАЕ ЯННРБЕРЯРБСЧР НАПЮГЖС ДХЮОЮГНМЮ. еЯКХ БШ МЕ УНРХРЕ СВХРШБЮРЭ ЩРХ ГЮОХЯХ, БШ ЛНФЕРЕ МЮОХЯЮРЭ НОЕПЮРНПШ if Б ОПЮБХКЮУ ДЕИЯРБХЪ, ВРНАШ НРДЕКХРЭ ХУ НР ГЮОХЯЕИ, ОПЕДЯРЮБКЪЧЫХУ ХМРЕПЕЯ ДКЪ БЮЯ. дКЪ НАПЮГЖЮ БНГЛНФМН АШРЭ БЙКЧВЕММШЛ Х БШЙКЧВЕММШЛ НДМНИ Х РНИ ФЕ ГЮОХЯЭЧ, ЕЯКХ НМЮ СДНБКЕРБНПЪЕР НАНХЛ СЯКНБХЪЛ. рНЦДЮ ДЕИЯРБХЪ БШОНКМЪЧРЯЪ РНКЭЙН ДКЪ ЩРНИ ГЮОХЯХ.

мЮОПХЛЕП, ОПЕДОНКНФХЛ ВРН БШ ХЛЕЕРЕ РЕЙЯР ЛЕФДС ДБСЛЪ НДХМЮЙНБШЛХ ЛЮПЙЕПЮЛХ (ЯЙЮФЕЛ, ЛЕФДС ЯХЛБНКЮЛХ `%'), ЙНРНПШИ БШ УНРХРЕ ХЦМНПХПНБЮРЭ. бШ ЛНФЕРЕ ЯЙНЛАХМХПНБЮРЭ НАПЮГЕЖ ДХЮОЮГНМЮ, ЙНРНПШИ НОХЯШБЮЕР БШДЕКЕММШИ РЕЙЯР, Я НОЕПЮРНПНЛ next (НМ ЕЫЕ МЕ ПЮЯЯЛЮРПХБЮКЯЪ, ЯЛ. ПЮГДЕК 9.7 [нОЕПЮРНП next], ЯРП. 111), ЙНРНПШИ ОНАСФДЮЕР awk НОСЯРХРЭ БЯЪЙСЧ ДЮКЭМЕИЬСЧ НАПЮАНРЙС РЕЙСЫЕИ ГЮОХЯХ Х МЮВЮРЭ Я МЮВЮКЮ НАПЮАНРЙС ЯКЕДСЧЫЕИ ГЮОХЯХ.

рЮЙЮЪ ОПНЦПЮЛЛЮ ЛНФЕР ЙЮЙ АСДРН БШЦКЪДЕРЭ РЮЙ:

/^%$/,/^%$/ - next ""
- print ""

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

/^%$/ - skip = ! skip; 

next "" skip == 1 - next "" # ОПНОСЯРХРЭ ЯРПНЙХ Я `skip' set

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

echo Yes -- awk '/1/,/2/ ---- /Yes/'

юБРНП ЩРНИ ОПНЦПЮЛЛШ ОПЕДОНКЮЦЮК, ВРН НМЮ АСДЕР ПЮАНРЮРЭ ЙЮЙ

`(/1/,/2/) ---- /Yes/'. нДМЮЙН, awk ХМРЕПОПЕРХПСЕР ЕЕ ЙЮЙ
 `/1/, (/2/ ---- /Yes/)'. щРН МЕ ЛНФЕР АШРЭ ХГЛЕМЕМН ХКХ ПЮАНРЮРЭ ДЮКЭЬЕ;
 
НАПЮГЖШ ДХЮОЮГНМНБ МЕ ЙНЛАХМХПСЧРЯЪ Я ДПСЦХЛХ НАПЮГЖЮЛХ.

8.1.5 яОЕЖХЮКЭМШЕ НАПЮГЖШ BEGIN Х END

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

BEGIN Х END ЯКСФЮР ЯОЕЖХЮКЭМШЛХ НАПЮГЖЮЛХ. нМХ МЕ ХЯОНКЭГСЧРЯЪ ДКЪ ЯПЮБМЕМХЪ Я БУНДМШЛХ ГЮОХЯЪЛХ. нМХ НАЕЯОЕВХБЮЧР ЯРЮПРНБШЕ ХКХ ГЮЙКЧВХРЕКЭМШЕ ДЕИЯРБХЪ Б ЯЖЕМЮПХХ awk.

8.1.5.1 яРЮПРНБШЕ Х ГЮЙКЧВХРЕКЭМШЕ ДЕИЯРБХЪ

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

оПЮБХКН BEGIN БШОНКМЪЕРЯЪ НДХМ ПЮГ, ДН ВРЕМХЪ ОЕПБНИ БУНДМНИ ГЮОХЯХ. оПЮБХКН END БШОНКМЪЕРЯЪ НДХМ ПЮГ, ОНЯКЕ ОПНВРЕМХЪ БЯЕЦН ББНДЮ.

мЮОПХЛЕП:


$ awk ' ? BEGIN - print "Analysis of ""foo""" "" ? /foo/ - ++n "" ? END&
 - print """foo"" appears " n " times." ""' BBS-list
a Analysis of "foo"
a "foo" appears 4 times.

щРЮ ОПНЦПЮЛЛЮ НОПЕДЕКЪЕР ЙНКХВЕЯРБН ГЮОХЯЕИ Б БУНДМНЛ ТЮИКЕ `BBS-list', ЙНРНПШЕ ЯНДЕПФЮР ЖЕОНВЙХ `foo'. оПЮБХКН BEGIN ОЕВЮРЮЕР ГЮЦНКНБНЙ НРВЕРЮ. мЕР МСФДШ ХЯОНКЭГНБЮРЭ ОПЮБХКН BEGIN ДКЪ ХМХЖХЮКХГЮЖХХ ЯВЕРВХЙЮ n МСКЕЛ, РЮЙ ЙЮЙ awk ДЕКЮЕР ЩРН ЮБРНЛЮРХВЕЯЙХ (ЯЛ. ПЮГДЕК 7.3 [оЕПЕЛЕММШЕ], ЯРП. 79). бРНПНЕ ОПЮБХКН СБЕКХВХБЮЕР ОЕПЕЛЕММСЧ n ЙЮФДШИ ПЮГ, ЙНЦДЮ ВХРЮЕРЯЪ ГЮОХЯЭ, ЯНДЕПФЮЫЮЪ НАПЮГЕЖ `foo'. оПЮБХКН END ОЕВЮРЮЕР ГМЮВЕМХЕ n Б ЙНМЖЕ ПЮАНРШ.

яОЕЖХЮКЭМШЕ НАПЮГЖШ BEGIN Х END МЕ ЛНЦСР ХЯОНКЭГНБЮРЭЯЪ Б ДХЮОЮГНМЮУ ХКХ Б АСКЕБЯЙХУ НОЕПЮРНПЮУ (БЕПМЕЕ, НМХ МЕ ЛНЦСР ХЯОНКЭГНБЮРЭЯЪ МХ Я ЙЮЙХЛХ НОЕПЮРНПЮЛХ).

нДМЮ awk-ОПНЦПЮЛЛЮ ЛНФЕР ХЛЕРЭ ЛМНЦН BEGIN Х/ХКХ END ОПЮБХК. нМХ БШОНКМЪЧРЯЪ Б ОНПЪДЙЕ ХУ ПЮЯОНКНФЕМХЪ, БЯЕ ОПЮБХКЮ BEGIN ОПХ ЯРЮПРЕ Х БЯЕ ОПЮБХКЮ END ОПХ НЙНМВЮМХХ. BEGIN Х END ОПЮБХКЮ ЛНЦСР ОЕПЕЛЕФЮРЭЯЪ Я ДПСЦХЛХ ОПЮБХКЮЛХ. щРЮ БНГЛНФМНЯРЭ АШКЮ ДНАЮБКЕМЮ Б awk-БЕПЯХХ 1987 Х БУНДХР Б ЯРЮМДЮПР POSIX. нПХЦХМЮКЭМЮЪ (1978) БЕПЯХЪ awk РПЕАСЕР ОНЛЕЫЮРЭ ОПЮБХКН BEGIN Б МЮВЮКЕ ОПНЦПЮЛЛШ, Ю ОПЮБХКН END Б ЙНМЖЕ, Х ДНОСЯЙЮЕР РНКЭЙН ОН НДМНЛС ЙЮФДНЦН БХДЮ. щРНЦН АНКЭЬЕ МЕ РПЕАСЕРЯЪ, МН ЩРН ПЕЙНЛЕМДСЕРЯЪ ДКЪ КСВЬЕИ НПЦЮМХГЮЖХХ Х ВХРЮЕЛНЯРХ ОПНЦПЮЛЛШ.

йПЮРМШЕ ОПЮБХКЮ BEGIN Х END ОНКЕГМШ ОПХ МЮОХЯЮМХХ АХАКХНРЕВМШУ ТСМЙЖХИ, ОНЯЙНКЭЙС ЙЮФДШИ АХАКХНРЕВМШИ ТЮИК ЛНФЕР ХЛЕРЭ ЯБНЕ ЯНАЯРБЕММНЕ ОПЮБХКН BEGIN Х/ХКХ END ДКЪ ЯНАЯРБЕММНИ ХМХЖХЮКХГЮЖХХ Х/ХКХ ГЮБЕПЬЕМХЪ. гЮЛЕРХЛ, ВРН ОНПЪДНЙ, Б ЙНРНПНЛ АХАКХНРЕВМШЕ ТСМЙЖХХ МЮГШБЮЧРЯЪ Б ЙНЛЮМДМНИ ЯРПНЙЕ, НОПЕДЕКЪЕР ОНПЪДНЙ, Б ЙНРНПНЛ БШОНКМЪЧРЯЪ ХУ ОПЮБХКЮ BEGIN Х END. оНЩРНЛС МСФМН ОХЯЮРЭ ЩРХ ОПЮБХКЮ Б АХАКХНРЕВМНЛ ТЮИКЕ РЮЙ, ВРНАШ ОНПЪДНЙ ХУ ХЯОНКМЕМХЪ АШК АЕГПЮГКХВЕМ. яЛ. ПЮГДЕК 14.1 [оЮПЮЛЕРПШ ЙНЛЮМДМНИ ЯРПНЙХ], ЯРП. 161, Н ОНДПНАМНЯРЪУ ХЯОНКЭГНБЮМХЪ АХАКХНРЕВМШУ ТСМЙЖХИ. яЛ. ЦКЮБС 15 [аХАКХНРЕЙЮ ТСМЙЖХИ awk], ЯРП. 169, ЯНДЕПФЮЫЕИ ЯБЕДЕМХЪ Н ЛМНЦХУ АХАКХНРЕВМШУ ТСМЙЖХЪУ.

еЯКХ awk-ОПНЦПЮЛЛЮ ХЛЕЕР РНКЭЙН ОПЮБХКН BEGIN Х МХЙЮЙХУ ДПСЦХУ ОПЮБХК, РН НМЮ ГЮЙЮМВХБЮЕРЯЪ ОНЯКЕ БШОНКМЕМХЪ ОПЮБХКЮ BEGIN. (мЮВЮКЭМЮЪ БЕПЯХЪ ОПНДНКФЮКЮ ВРЕМХЕ ДН ЙНМЖЮ ТЮИКЮ, ХЦМНПХПСЪ БУНДМШЕ ДЮММШЕ.) нДМЮЙН ЕЯКХ ЯСЫЕЯРБСЕР ОПЮБХКН END, ББНД ВХРЮЕРЯЪ ДЮФЕ ЕЯКХ Б ОПНЦПЮЛЛЕ МЕР ДПСЦХУ ОПЮБХК. щРН МЕНАУНДХЛН Б ЯКСВЮЕ, ЙНЦДЮ ОПЮБХКН END ОПНБЕПЪЕР ОЕПЕЛЕММШЕ FNR Х NR (d.c.).

оПЮБХКЮ BEGIN Х END ДНКФМШ ХЛЕРЭ ДЕИЯРБХЪ; ДКЪ МХУ МЕ ОПЕДСЯЛНРПЕМШ ДЕИЯРБХЪ ОН СЛНКВЮМХЧ, ОНЯЙНКЭЙС ОПХ ХУ ХЯОНКМЕМХХ МЕР МХЙЮЙХУ РЕЙСЫХУ ГЮОХЯЕИ.

8.1.5.2 бБНД/БШБНД ХГ ОПЮБХК BEGIN Х END

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

хЛЕЕРЯЪ МЕЯЙНКЭЙН БНОПНЯНБ (ХМНЦДЮ РНМЙХУ), ЯБЪГЮММШУ Я I/O Б ОПЮБХКЮУ BEGIN ХКХ END. оЕПБШИ ХГ МХУ НРМНЯХРЯЪ Й ГМЮВЕМХЧ $0 Б ОПЮБХКЕ BEGIN. рЮЙ ЙЮЙ ОПЮБХКЮ BEGIN БШОНКМЪЧРЯЪ ДН ВРЕМХЪ БЯЪЙНЦН ББНДЮ, РН Б ЩРН БПЕЛЪ ЕЫЕ МЕР БУНДМНИ ГЮОХЯХ Х МХЙЮЙХУ ОНКЕИ. яЯШКЙХ МЮ $0 Х ОНКЪ ДЮЧР ОСЯРШЕ ЖЕОНВЙХ ХКХ МСКХ, Б ГЮБХЯХЛНЯРХ НР ЙНМРЕЙЯРЮ. нДХМ ЯОНЯНА ОПХДЮРЭ $0 ПЕЮКЭМНЕ ГМЮВЕМХЕ ЯНЯРНХР Б БШОНКМЕМХХ ЙНЛЮМДШ getline АЕГ ОЕПЕЛЕММНИ (ЯЛ. ПЮГДЕК 5.8 [ъБМШИ ББНД Я ОНЛНЫЭЧ getline], ЯРП. 53). дПСЦНИ ОСРЭ ЯНЯРНХР Б ОПХЯБЮХБЮМХХ ЕИ МЕЙНРНПНЦН ГМЮВЕМХЪ.

дПСЦНИ БНОПНЯ ОНДНАЕМ ОЕПБНЛС, МН НРМНЯХРЯЪ Й ОПНРХБНОНКНФМНЛС ЙНМЖС. йЮЙНЕ ГМЮВЕМХЕ ХЛЕЧР БМСРПХ ОПЮБХКЮ END ОЕПЕЛЕММШЕ $0 Х NF? рПЮДХЖХНММН ЯВХРЮКНЯЭ, ВРН $0 Х NF МЕНОПЕДЕКЕММШ БМСРПХ ОПЮБХКЮ END. б ЯРЮМДЮПРЕ POSIX СЙЮГЮМН, ВРН NF СЙЮГШБЮЕР ЙНКХВЕЯРБН ОНКЕИ Б ОНЯКЕДМЕИ БУНДМНИ ГЮОХЯХ. оН-БХДХЛНЛС ОН МЕДНЯЛНРПС Б ЯРЮМДЮПРЕ МЕ СЙЮГЮМН, ВРН $0 РЮЙФЕ ЯНУПЮМЪЕР ГМЮВЕМХЕ ОНЯКЕДМЕИ ГЮОХЯХ. gawk НЯРЮБКЪЕР ЩРН ГМЮВЕМХЪ ДКЪ ХЯОНКЭГНБЮМХЪ Б ОПЮБХКЕ END. мН ГМЮИРЕ, ВРН Unix awk Х, БНГЛНФМН, ДПСЦХЕ ПЕЮКХГЮЖХХ ЩРНЦН МЕ ДЕКЮЧР.

рПЕРХИ БНОПНЯ БШРЕЙЮЕР ХГ ДБСУ ОЕПБШУ. йЮЙНБ ЯЛШЯК `print' БМСРПХ ОПЮБХК BEGIN ХКХ END? нАШВМН ЕЦН ЯЛШЯК `print $0'. еЯКХ $0 ЕЯРЭ ОСЯРЮЪ ЖЕОНВЙЮ, РН ОЕВЮРЮЕРЯЪ ОСЯРЮЪ ЯРПНЙЮ. хГДЮБМЮ ОПНЦПЮЛЛХЯРШ awk СОНРПЕАКЪЧР `print' Б ОПЮБХКЮУ BEGIN Х END Б ЯЛШЯКЕ `print ""', СОНБЮЪ МЮ РН, ВРН $0 ОСЯРЮ. уНРЪ БШ НА ЩРНЛ ЛНФЕРЕ МЕ ГЮАНРХРЭЯЪ Б ОПЮБХКЕ BEGIN, БН БЯЪЙНЛ ЯКСВЮЕ Б gawk, ЩРН МЕ ОПХБЕДЕР Й ДНАПС Б END. х ЩРН ОКНУНИ ЯРХКЭ. еЯКХ БШ УНРХРЕ ОНКСВХРЭ ОСЯРСЧ ЯРПНЙС Б БШБНДЕ, ЩРН БЯЕЦДЮ ЛНФМН ЯДЕКЮРЭ ЪБМШЛ НАПЮГНЛ.

8.1.6 оСЯРНИ НАПЮГЕЖ

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

оСЯРНИ (Р.e. МЕ ЯСЫЕЯРБСЧЫХИ) НАПЮГЕЖ ПЮЯЯЛЮРПХБЮЕРЯЪ ЙЮЙ ЯННРБЕРЯРБСЧЫХИ КЧАНИ БУНДМНИ ГЮОХЯХ.

мЮОПХЛЕП, ОПНЦПЮЛЛЮ:

awk '- print $1 ""' BBS-list

ОЕВЮРЮЕР ОЕПБНЕ ОНКЕ ЙЮФДНИ ГЮОХЯХ.

8.2 нАГНП ДЕИЯРБХИ

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

йЮФДЮЪ awk-ОПНЦПЮЛЛЮ ХКХ ЯЖЕМЮПХИ ЯНЯРНХР ХГ ОНЯКЕДНБЮРЕКЭМНЯРХ ОПЮБХК Х НОПЕДЕКЕМХИ ТСМЙЖХИ, ОЕПЕЛЕФЮЧЫХУЯЪ ЛЕФДС ЯНАНИ. (тСМЙЖХХ АСДСР НОХЯЮМШ ОНГФЕ). яЛ. ЦКЮБС 13 [тСМЙЖХХ, НОПЕДЕКЕММШЕ ОНКЭГНБЮРЕКЕЛ], ЯРП., 153.) оПЮБХКН ЯНДЕПФХР НАПЮГЕЖ Х ДЕИЯРБХЕ, ОПХВЕЛ РН ХКХ ДПСЦНЕ (МН МЕ НАЮ БЛЕЯРЕ) ЛНЦСР АШРЭ НОСЫЕМШ. жЕКЭ ДЕИЯРБХЪ --- ЯННАЫХРЭ awk, ВРН МСФМН ДЕКЮРЭ, ЕЯКХ НАМЮПСФЕМН ЯННРБЕРЯРБХЕ НАПЮГЖС.

 б НАЫХУ ВЕПРЮУ awk-ОПНЦПЮЛЛЮ БШЦКЪДХР РЮЙ:

[pattern] [- action ""] [pattern] [- action ""] ...

function name(args) - ... "" ...

дЕИЯРБХЕ ЯНЯРНХР ХГ НДМНЦН ХКХ АНКЕЕ НОЕПЮРНПНБ awk, ГЮЙКЧВЕММШУ Б ТХЦСПМШЕ ЯЙНАЙХ (`-' Х `""'). йЮФДШИ НОЕПЮРНП СЙЮГШБЮЕР НОПЕДЕКЕММНЕ ДЕИЯРБХЕ. нОЕПЮРНПШ ПЮГДЕКЪЧРЯЪ ЯХЛБНКЮЛХ newlines ХКХ РНВЙЮЛХ Я ГЮОЪРНИ. тХЦСПМШЕ ЯЙНАЙХ БНЙПСЦ ДЕИЯРБХИ ДНКФМШ СЙЮГШБЮРЭЯЪ ДЮФЕ ЕЯКХ ДЕИЯРБХЕ ЯНДЕПФХР РНКЭЙН НДХМ НОЕПЮРНП ХКХ БННАЫЕ МЕ ЯНДЕПФХР НОЕПЮРНПНБ. нДМЮЙН, ЕЯКХ ДЕИЯРБХЕ НОСЯЙЮЕРЯЪ ЖЕКХЙНЛ, НОСЯЙЮИРЕ Х ТХЦСПМШЕ ЯЙНАЙХ. нОСЫЕММНЕ ДЕИЯРБХЕ ЩЙБХБЮКЕМРМН `- print $0 ""'.

/foo/ - "" # ЯННРБЕРЯРБХЕ foo, ДЕИЯРБХИ МЕР - ОСЯРНЕ ДЕИЯРБХЕ
/foo/ # ЯННРБЕРЯРБХЕ foo, ОЕВЮРЭ ГЮОХЯХ - НОСЫЕММНЕ ДЕИЯРБХЕ

оЕПЕВХЯКХЛ РХОШ НОЕПЮРНПНБ, НОПЕДЕКЕММШУ Б awk:

бШПЮФЕМХЪ, ЙНРНПШЕ ЛНЦСР БШГШБЮРЭ ТСМЙЖХХ ХКХ ОПХЯБЮХБЮРЭ ГМЮВЕМХЪ ОЕПЕЛЕММШЛ (ЯЛ. ЦКЮБС 7 [бШПЮФЕМХЪ], ЯРП. 77). бШОНКМЕМХЕ НОЕПЮРНПНБ ЩРНЦН РХОЮ ЯБНДХРЯЪ Й БШВХЯКЕМХЧ ГМЮВЕМХЪ БШПЮФЕМХЪ. щРН ДЕИЯРБЕММН, ЙНЦДЮ БШПЮФЕМХЕ ХЛЕЕР ОНАНВМШЕ ЩТТЕЙРШ (ЯЛ. ПЮГДЕК 7.7 [оПХЯБЮХБЮЧЫХЕ БШПЮФЕМХЪ], ЯРП. 84).

сОПЮБКЪЧЫХЕ БШПЮФЕМХЪ, ЙНРНПШЕ СОПЮБКЪЧР ОНПЪДЙНЛ ХЯОНКМЕМХЪ awk-ОПНЦПЮЛЛ. ъГШЙ awk ХЛЕЕР ЙНМЯРПСЙЖХХ, ОНДНАМШЕ ЙНМЯРПСЙЖХЪЛ Б ЪГШЙЕ CХ (if, for, while, do) Х МЕЯЙНКЭЙН ЯОЕЖХЮКЭМШУ (ЯЛ. ЦКЮБС 9 [сОПЮБКЪЧЫХЕ НОЕПЮРНПШ Б ДЕИЯРБХЪУ], ЯРП. 105).

яНЯРЮБМШЕ НОЕПЮРНПШ, ЙНРНПШЕ ЯНЯРНЪР ХГ НДМНЦН ХКХ АНКЕЕ НОЕПЮРНПНБ, ГЮЙКЧВЕММШУ Б ТХЦСПМШЕ ЯЙНАЙХ. яНЯРЮБМШЕ НОЕПЮРНПШ ХЯОНКЭГСЧРЯЪ ДКЪ РНЦН, ВРНАШ НАЗЕДХМХРЭ МЕЯЙНКЭЙН НОЕПЮРНПНБ Б НДХМ Б РЕКЕ if, while, do ХКХ for НОЕПЮРНПНБ.

нОЕПЮРНПШ ББНДЮ, ХЯОНКЭГСЧЫХЕ ЙНЛЮМДС getline (ЯЛ. ПЮГДЕК 5.8 [ъБМШИ ББНД Я ОНЛНЫЭЧ getline], ЯРП. 53), НОЕПЮРНП next (ЯЛ. ПЮГДЕК 9.7 [НОЕПЮРНП next], ЯРП. 111), Х НОЕПЮРНП nextfile (ЯЛ. ПЮГДЕК 9.8 [нОЕПЮРНП nextfile], ЯРП. 112). нОЕПЮРНПШ БШБНДЮ print Х printf. яЛ. ЦКЮБС 6 [оЕВЮРЭ ПЕГСКЭРЮРНБ], ЯРП. 61. нОЕПЮРНПШ СДЮКЕМХЪ ДКЪ СДЮКЕМХЪ ЩКЕЛЕМРНБ ЛЮЯЯХБНБ. яЛ. ПЮГДЕК 11.6 [нОЕПЮРНПШ СДЮКЕМХЪ], ЯРП. 128. яКЕДСЧЫЮЪ ЦКЮБЮ НОХЯШБЮЕР Б ДЕРЮКЪУ НОЕПЮРНПШ СОПЮБКЕМХЪ.

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

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

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