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

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

2. мЮВЮКН awk

нЦКЮБКЕМХЕ

мЮВЮКЭМШЕ ЯБЕДЕМХЪ НА awk

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

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

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

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

pattern - action "" pattern - action "" ...

2.1 пНГЮ ОНД КЧАШЛ ДПСЦХЛ ХЛЕМЕЛ

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

ъГШЙ awk ПЮГПЮАЮРШБЮКЯЪ МЕЯЙНКЭЙН КЕР. оНКМНЯРЭЧ ЩРНР ОПНЖЕЯЯ НОХЯЮМ Б цК. 17 [пЮГБХРХЕ ЪГШЙЮ awk], ЯРП.253. мЮ НОХЯЮММШИ Б ЙМХЦЕ ЪГШЙ ЯЯШКЮЧРЯЪ ВЮЯРН ЙЮЙ МЮ "МНБШИ awk." мЮ ЛМНЦХУ ЯХЯРЕЛЮУ ХЛЕЧРЯЪ ПЮГМШЕ БЕПЯХХ ЪГШЙЮ. мЕЙНРНПШЕ ЯХЯРЕЛШ ХЛЕЧР ХМРЕПОПЕРЮРНП awk, ПЕЮКХГСЧЫХИ МЮВЮКЭМСЧ БЕПЯХЧ ЪГШЙЮ Х ЯПЕДЯРБЮ awk ДКЪ МНБНИ БЕПЯХХ. дПСЦХЕ ХЛЕЧР oawk ДКЪ "ЯРЮПНЦН awk" Х ОПНЯРНИ awk ДКЪ МНБНИ БЕПЯХХ. рПЕРЭХ ХЛЕЧР РНКЭЙН НДМС БЕПЯХЧ, НАШВМН МНБСЧ.

бЯЕ ЩРН ДЕКЮЕР РПСДМШЛ ДКЪ БЮЯ СГМЮРЭ, ЙЮЙНИ БЕПЯХЕИ БШ АСДЕРЕ ОНКЭГНБЮРЭЯЪ ОПХ ХЯОНКМЕМХХ ОПНЦПЮЛЛШ, ЙНРНПСЧ ОХЬЕРЕ. кСВЬХИ ЯНБЕР, ЙНРНПШИ БШ ЛНФЕЛ ГДЕЯЭ БЮЛ ДЮРЭ --- ХГСВХРЕ БЮЬС ЛЕЯРМСЧ ДНЙСЛЕМРЮЖХЧ. хЫХРЕ awk, oawk Х nawk, Ю РЮЙФЕ gawk. бНГЛНФМН, БШ ХЛЕЕРЕ ЙЮЙСЧ-МХАСДЭ БЕПЯХЧ МНБНЦН awk МЮ БЮЬЕИ ЯХЯРЕЛЕ. вЮЯРН ЩРХ ЯХЯРЕЛШ ХЯОНКЭГСЧР gawk ДКЪ ЯБНЕИ ПЕЮКХГЮЖХХ awk, Х ХЛЕММН ЩРН БШ ДНКФМШ ХЛЕРЭ ББХДС ДКЪ ХЯОНКМЕМХЪ БЮЬХУ ОПНЦПЮЛЛ. (йНМЕВМН, ЕЯКХ БШ ВХРЮЕРЕ ЩРС ЙМХЦС, ЬЮМЯШ ДНЯРЮРНВМН БЕКХЙХ, ВРН БШ ХЛЕЕРЕ gawk!)

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

2.2 йЮЙ ГЮОСЯЙЮРЭ awk-ОПНЦПЮЛЛШ

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

хЛЕЧРЯЪ МЕЯЙНКЭЙН ОСРЕИ ДКЪ ГЮОСЯЙЮ awk-ОПНЦПЮЛЛ. еЯКХ ОПНЦПЮЛЛЮ ЙНПНРЙЮЪ, ОПНЫЕ БЯЕЦН БЙКЧВХРЭ ЕЕ Б ЙНЛЮМДС БШОНКМЕМХЪ awk, ОНДНАМН ЯКЕДСЧЫЕЛС:

awk 'program' input-file1 input-file2 ...

ЦДЕ ОПНЦПЮЛЛЮ ЯНЯРНХР ХГ ОНЯКЕДНБЮРЕКЭМНЯРХ НАПЮГЖНБ Х ДЕИЯРБХИ, ЙЮЙ ЦНБНПХКНЯЭ БШЬЕ. (ОПХВХМЮ НДХМНВМШУ ЙЮБШВЕЙ НАЗЪЯМЪЕРЯЪ МХФЕ, Б ПЮГДЕКЕ 2.2.1) [йНПНРЙХЕ ПЮГНБШЕ awk-ОПНЦПЮЛЛШ], ЯРП. 10.

еЯКХ ОПНЦПЮЛЛЮ ДКХММЮЪ, НАШВМН СДНАМЕЕ ГЮОХЯЮРЭ ЕЕ Б ТЮИК Х БШОНКМЪРЭ ОН РЮЙНИ ЙНЛЮМДЕ:

awk -f program-file input-file1 input-file2 ...

2.2.1 йНПНРЙХЕ ПЮГНБШЕ awk-ООПНЦПЮЛЛШ

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

еЯКХ БШ УНПНЬН ГМЮЙНЛШ Я awk, БШ ВЮЯРН ОЕВЮРЮЕРЕ ОПНЯРШЕ ОПНЦПЮЛЛШ Б ЛНЛЕМР, ЙНЦДЮ УНРХРЕ ХЯОНКЭГНБЮРЭ ХУ. рНЦДЮ БШ ОХЬХРЕ ОПНЦПЮЛЛС ЙЮЙ ОЕПБШИ ЮПЦСЛЕМР ЙНЛЮМДШ awk:

awk 'program' input-file1 input-file2 ...

ЦДЕ ОПНЦПЮЛЛЮ ЯНЯРНХР ХГ ПЪДЮ НАПЮГЖНБ Х ДЕИЯРБХИ, ЙЮЙ СОНЛХМЮКНЯЭ БШЬЕ. йНЛЮМДЮ РЮЙНЦН ТНПЛЮРЮ ОПХЙЮГШБЮЕР НАНКНВЙЕ, ХКХ ЙНЛЮМДМНЛС ОПНЖЕЯЯНПС, ГЮОСЯРХРЭ awk Х ХЯОНКЭГНБЮРЭ ОПНЦПЮЛЛС ДКЪ НАПЮАНРЙХ БУНДМНЦН ТЮИКЮ (ТЮИКНБ). оПНЦПЮЛЛЮ ГЮЙКЧВЕМЮ Б НДХМНВМШЕ ЙЮБШВЙХ, РЮЙ ЙЮЙ НАНКНВЙЮ МЕ ДНКФМЮ ХМРЕПОПЕРХПНБЮРЭ ЯХЛБНКШ awk ЙЮЙ ЯОЕЖХЮКЭМШЕ ЯХЛБНКШ НАНКНВЙХ. йЮБШВЙХ РЮЙФЕ ОНАСФДЮЧР НАНКНВЙС РПЮЙРНБЮРЭ БЯЧ ОПНЦПЮЛЛС ЙЮЙ ЕДХМШИ ЮПЦСЛЕМР ДКЪ awk Х ОНГБНКЪЧР ОПНЦПЮЛЛЕ АШРЭ ДКХММЕЕ НДМНИ ЯРПНЙХ. щРНР ТНПЛЮР РЮЙФЕ СДНАЕМ ДКЪ БШОНКМЕМХЪ ЙНПНРЙХУ ХКХ ЯПЕДМЕ ДКХММШУ awk-ОПНЦПЮЛЛ ХГ ЯЖЕМЮПХЕБ НАНКНВЙХ, РЮЙ ЙЮЙ ЩРН ОНГБНКЪЕР ХГАЕФЮРЭ НРДЕКЭМНЦН ТЮИКЮ ДКЪ awk-ОПНЦПЮЛЛШ. яЮЛНЯРНЪРЕКЭМШИ НАНКНВЕВМШИ ЯЖЕМЮПХИ АНКЕЕ МЮДЕФЕМ, РЮЙ ЙЮЙ МЕР ДПСЦХУ ТЮИКНБ, ЙНРНПШЕ ЛНЦСР ОПХБЕЯРХ Й МЕДНПЮГСЛЕМХЧ.

цК. 3 [оНКЕГМШЕ НДМНЯРПНВМШЕ ОПНЦПЮЛЛШ], ЯРП. 21, ОПЕДКЮЦЮЕР МЕЯЙНКЭЙН ЙНПНРЙХУ ЯЮЛНЯРНЪРЕКЭМШУ ОПНЦПЮЛЛ.

лЕФДС ОПНВХЛ, ЙНЛЮМДЮ

awk '/foo/' files ...

ОН ЯСЫЕЯРБС РН ФЕ ЯЮЛНЕ ЙЮЙ

egrep foo files ...

2.2.2 бШОНКМЕМХЕ awk АЕГ БУНДМШУ ТЮИКНБ

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

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

awk 'program'

РН awk НАПЮРХРЯЪ Й ОПНЦПЮЛЛЕ ЯРЮМДЮПРМНЦН ББНДЮ, ЙНРНПЮЪ НАШВМН НГМЮВЮЕР РН, ВРН БШ ОЕВЮРЮЕРЕ МЮ РЕПЛХМЮКЕ. щРН ОПНДНКФЮЕРЯЪ, ОНЙЮ БШ МЕ СЙЮФЕРЕ end-of-file, МЮОЕВЮРЮБ Control-d. (б ДПСЦХУ НОЕПЮЖХНММШУ ЯХЯРЕЛЮУ end-of-file ЛНФЕР АШРЭ ДПСЦХЛ ЯХЛБНКНЛ. мЮОПХЛЕП, Б OS/2 Х MS-DOS, ЩРН Control-z.)

мЮОПХЛЕП, ЯКЕДСЧЫЮЪ ОПНЦПЮЛЛЮ ОЕВЮРЮЕР ДПСФЕЯРБЕММШИ ЯНБЕР (ХГ ЙМХЦХ Douglas Adams пСЙНБНДЯРБН ДКЪ ОСРЕЬЕЯРБСЧЫЕЦН ЮБРНЯРНОНЛ ОН цЮКЮЙРХЙЕ) БНГДЕПФХБЮРЭЯЪ НР ФЮКНА МЮ ЯКНФМНЯРХ ЙНЛОЭЧРЕПМНЦН ОПНЦПЮЛЛХПНБЮМХЪ (ЯН ЯБНИЯРБНЛ `BEGIN' ЛШ ЕЫЕ МЕ ГМЮЙНЛШ).

$ awk "BEGIN - print ""Don't Panic!"" """
a Don't Panic!

щРЮ ОПНЦПЮЛЛЮ МЕ РПЕАСЕР МХЙЮЙНЦН ББНДЮ. `"' ОЕПЕД ЙЮФДНИ БМСРПЕММЕИ ДБНИМНИ ЙЮБШВЙНИ МЕНАУНДХЛН БЯКЕДЯРБХЕ НАНКНВЕВМШУ ОПЮБХК ДКЪ ЙЮБШВЕЙ, Б ВЮЯРМНЯРХ ОНРНЛС, ВРН НМХ ЯЛЕЬХБЮЧР НПДХМЮПМШЕ Х ДБНИМШЕ ЙЮБШВЙХ.

яКЕДСЧЫЮЪ ОПНЯРЮЪ awk-ОПНЦПЮЛЛЮ ЩЛСКХПСЕР ЯПЕДЯРБН cat; НМЮ ЙНОХПСЕР БЯЕ, ВРН БШ ОЕВЮРЮЕРЕ МЮ ЙКЮБХЮРСПЕ, МЮ ЯРЮМДЮПРМШИ БШУНД. (йЮЙ ЩРН ОПНХЯУНДХР, АСДЕР БЯЙНПЕ ОНЪЯМЕМН.)

$ awk '- print ""'

Now is the time for all good men

a Now is the time for all good men to come to the aid of their country.

a to come to the aid of their country. Four score and seven years ago, ...

a Four score and seven years ago, ... What, me worry?

a What, me worry? Control-d

2.2.3 бШОНКМЕМХЕ ДКХММШУ ОПНЦПЮЛЛ

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

хМНЦДЮ БЮЬЮ awk-ОПНЦПЮЛЛЮ ОНКСВЮЕРЯЪ НВЕМЭ ДКХММНИ. б РЮЙНЛ ЯКСВЮЕ СДНАМН ПЮГЛЕЫЮРЭ ЕЕ Б НРДЕКЭМНЛ ТЮИКЕ. оПХЙЮГЮРЭ awk ХЯОНКЭГНБЮРЭ ЩРНР ТЮИК Б ЙЮВЕЯРБЕ ОПНЦПЮЛЛШ ЛНФМН, МЮОЕВЮРЮБ:

awk -f source-file input-file1 input-file2 ...

`-f' ОНАСФДЮЕР ХМРЕПОПЕРЮРНП awk ХГБКЕЙЮРЭ awk-ОПНЦПЮЛЛС ХГ ТЮИКЮ source-file. кЧАНЕ ТЮИКНБНЕ ХЛЪ ЛНФЕР ХЯОНКЭГНБЮРЭЯЪ Б ЙЮВЕЯРБЕ source-file. мЮОПХЛЕП, ЛНФМН ОНЛЕЯРХРЭ ОПНЦПЮЛЛС:

BEGIN - print "Don't Panic!" ""

Б ТЮИК  `advice'. рНЦДЮ РЮЙЮЪ ЙНЛЮМДЮ:

awk -f advice

ЯДЕКЮЕР РН ФЕ, ВРН Х ЯКЕДСЧЫЮЪ:

awk "BEGIN - print ""Don't Panic!"" """

ВРН АШКН НАЗЪЯМЕМН ПЮМЕЕ (ЯЛ. ПЮГДЕК 2.2.2 [БШОНКМЕМХЕ awk АЕГ БУНДМШУ ТЮИКНБ], ЯРП. 11). гЮЛЕРХЛ, ВРН БЮЛ НАШВМН МЕ МСФМШ НДХМНВМШЕ ЙЮБШВЙХ БНЙПСЦ ХЛЕМХ ТЮИКЮ, ЙНРНПШИ БШ ЯОЕЖХТХЖХПСЕРЕ ЙЮЙ `-f', ОНРНЛС ВРН АНКЭЬХМЯРБН ТЮИКНБШУ ХЛЕМ МЕ ЯНДЕПФХР ЯОЕЖХЮКЭМШУ ЯХЛБНКНБ НАНКНВЙХ. гЮЛЕРЭРЕ, ВРН Б `advice' awk-ОПНЦПЮЛЛЮ МЕ ГЮЙКЧВЕМЮ Б НДХМНВМШЕ ЙЮБШВЙХ. нМХ МСФМШ РНКЭЙН ДКЪ ОПНЦПЮЛЛ, ЙНРНПШЕ БЯРЮБКЪЧРЯЪ Б ЙНЛЮМДМСЧ ЯРПНЙС awk.

еЯКХ БШ УНРХРЕ ЪБМН ХЛЕМНБЮРЭ БЮЬХ awk ОПНЦПЮЛЛМШЕ ТЮИКШ ЙЮЙ РЮЙНБШЕ, ЛНФМН ДНАЮБХРЭ ПЮЯЬХПЕМХЕ `.awk' Й ХЛЕМХ ТЮИКЮ. щРН МЕ БКХЪЕР МЮ ХЯОНКМЕМХЕ ОПНЦПЮЛЛШ, НАКЕЦВЮЪ ОНМХЛЮМХЕ ЕЕ ЙНМЯРПСЙЖХХ.

2.2.4 хЯОНКМХЛШЕ awk-ОПНЦПЮЛЛШ

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

еЯКХ БШ ОНГМЮЙНЛХКХЯЭ Я awk, БШ ЛНФЕРЕ ГЮУНРЕРЭ ОХЯЮРЭ ЯЮЛНЯРНЪРЕКЭМШЕ ЯЖЕМЮПХХ awk, ХЯОНКЭГСЪ ЯЖЕМЮПМШИ ЛЕУЮМХГЛ `#!'. щРН ЛНФМН ДЕКЮРЭ МЮ ЛМНЦХУ Unix systems2 (Х БОНЯКЕДЯРБХХ Х МЮ ЯХЯРЕЛЮУ GNU). мЮОПХЛЕП, ЛНФМН ЛНДЕПМХГХПНБЮРЭ ТЮИК `advice' РЮЙ:

#! /bin/awk -f
BEGIN - print "Don't Panic!" ""

яДЕКЮБ ЩРНР ТЮИК ХЯОНКМХЛШЛ (Я ОНЛНЫЭЧ СРХКХРШ chmod), ЛНФМН ОПНЯРН МЮОЕВЮРЮРЭ `advice' ДКЪ ЙНЛЮМДМНЦН ОПНЖЕЯЯНПЮ, Х ЯХЯРЕЛЮ БШОНКМХР awk РЮЙ, ЙЮЙ Х Б ЯКСВЮЕ `awk -f advice':

$ advice

a Don't Panic!

лЕУЮМХГЛ `#!' ПЮАНРЮЕР МЮ ЯХЯРЕЛЮУ Linux, ЯХЯРЕЛЮУ Unix, ОПНХЯУНДЪЫХУ НР Berkeley Unix, МЮ ЯХЯРЕЛЮУ V Release 4, Х МЕЙНРНПШУ System V Release 3. яРПНЙЮ Я МЮВЮКНЛ `#!' НОПЕДЕКЪЕР ОНКМНЕ ХЛЪ ТЮИКЮ ХМРЕПОПЕРЮРНПЮ, ЙНРНПШИ МСФМН ГЮОСЯРХРЭ, Х БНГЛНФМШИ МЮВЮКЭМШИ ЮПЦСЛЕМР ЙНЛЮМДМНИ ЯРПНЙХ ДКЪ ОЕПЕДЮВХ ЩРНЛС ХМРЕПОПЕРЮРНПС. гЮРЕЛ НОЕПЮЖХНММЮЪ ЯХЯРЕЛЮ ГЮОСЯЙЮЕР ХМРЕПОПЕРЮРНП Я ЩРХЛ ЮПЦСЛЕМРНЛ Х ОНКМШЛ ЯОХЯЙНЛ ЮПЦСЛЕМРНБ ХЯОНКМЪЕЛНИ ОПНЦПЮЛЛШ. оЕПБШИ ЮПЦСЛЕМР Б ЯОХЯЙЕ - ЕЯРЭ ОНКМНЕ ТЮИКНБНЕ ХЛЪ awk-ОПНЦПЮЛЛШ. нЯРЮКЭМШЕ ЮПЦСЛЕМРШ ЯОХЯЙЮ --- ХКХ ОЮПЮЛЕРПШ awk, ХКХ ТЮИКШ Я ДЮММШЛХ, ХКХ Х РН Х ДПСЦНЕ.

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

бМХЛЮМХЕ: МЕКЭГЪ ОНЛЕЫЮРЭ АНКЕЕ НДМНЦН ЮПЦСЛЕМРЮ Б ЯРПНЙЕ `#!' ОНЯКЕ ОСРХ Й awk. щРН МЕ АСДЕР ПЮАНРЮРЭ: НОЕПЮЖХНММЮЪ ЯХЯРЕЛЮ ПЮЯЯЛЮРПХБЮЕР НЯРЮРНЙ ЯРПНЙХ ЙЮЙ НДХМ ЮПЦСЛЕМР Х ОЕПЕДЮЕР ЕЦН awk. щРН ЛНФЕР БШГБЮРЭ МЕОПЕДЯЙЮГСЕЛШЕ ОНЯКЕДЯРБХЪ, НАШВМН МЕЙНРНПСЧ ДХЮЦМНЯРХЙС НР awk.

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

: ДБНЕРНВХЕ НАЕЯОЕВХБЮЕР БШОНКМЕМХЕ ЯРЮМДЮПРМНИ НАНКНВЙНИ. awk 'program' "$@"

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

"$@" ОНАСФДЮЕР НАНКНВЙС ОЕПЕДЮРЭ БЯЕ ЮПЦСЛЕМРШ ЙНЛЮМДМНИ ЯРПНЙХ ОПНЦПЮЛЛЕ awk, АЕГ ХМРЕПОПЕРЮЖХХ. оЕПБЮЪ ЯРПНЙЮ, ЙНРНПЮЪ МЮВХМЮЕРЯЪ Я ДБНЕРНВХЪ, ХЯОНКЭГСЕРЯЪ РЮЙ, ВРН ЩРНР ЯЖЕМЮПХИ НАНКНВЙХ АСДЕР ПЮАНРЮРЭ ДЮФЕ ЕЯКХ БШГБЮМ ОНКЭГНБЮРЕКЕЛ, ЙНРНПШИ ХЯОНКЭГСЕР НАНКНВЙС яХ. (мЕ БЯЕ, МН ЛМНЦХЕ ЯРЮПШЕ ЯХЯРЕЛШ ЯКЕДСЧР ЩРНЛС ОПЮБХКС.)

2.2.5 йНЛЛЕМРЮПХХ Б awk-ОПНЦПЮЛЛЮУ

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

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

# щРЮ ОПНЦПЮЛЛЮ ОЕВЮРЮЕР ГЮАЮБМНЕ ДПСФЕЯЙНЕ ЯННАЫЕМХЕ. нМН ОНЛНЦЮЕР
# ОНКЭГНБЮРЕКЪЛ-МНБХВЙЮЛ МЕ АНЪРЭЯЪ ЙНЛОЭЧРЕПЮ.
BEGIN - print "Don't Panic!" ""

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

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

 мЮОПХЛЕП:

awk 'BEGIN - print "hello" "" # let's be cute'

2.3 нВЕМЭ ОПНЯРНИ ОПХЛЕП

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

яКЕДСЧЫЮЪ ЙНЛЮМДЮ БШОНКМЪЕР ОПНЯРСЧ awk-ОПНЦПЮЛЛС, ЙНРНПЮЪ ХЫЕР БН БУНДМНЛ ТЮИКЕ `BBS-list' ЖЕОНВЙХ ЯХЛБНКНБ `foo'. (жЕОНВЙЮ ЯХЛБНКНБ (string) НАШВМН МЮГШБЮЕРЯЪ ЖЕОНВЙНИ. щРНР РЕПЛХМ ОПНХЯУНДХР НР ЮМЦКХИЯЙХУ МЮХЛЕМНБЮМХИ РХОЮ "ЖЕОНВЙЮ ФЕЛВСФХМ" ХКХ "ЖЕОНВЙЮ БЮЦНМНБ Б ОНЕГДЕ.")

awk '/foo/ - print $0 ""' BBS-list.

йНЦДЮ МЮУНДЪРЯЪ ЯРПНЙХ, ЯНДЕПФЮЫХЕ `foo', НМХ ОЕВЮРЮЧРЯЪ, ОНРНЛС ВРН `print $0' НГМЮВЮЕР ОЕВЮРЭ РЕЙСЫЕИ ЯРПНЙХ. (оПНЯРН `print' НГМЮВЮЕР РН ФЕ ЯЮЛНЕ, РЮЙ ВРН ЛНФМН МЮОХЯЮРЭ ЕЦН БЛЕЯРН print $0.)

гЮЛЕРЭРЕ, ВРН ЯКЕЬХ `/' НЙПСФЮЧР ЖЕОНВЙС `foo' Б awk-ОПНЦПЮЛЛЕ. яКЕЬХ СЙЮГШБЮЧР, ВРН `foo' ЕЯРЭ НАПЮГЕЖ ДКЪ ОНХЯЙЮ. щРНР РХО НАПЮГЖЮ МЮГШБЮЕРЯЪ ПЕЦСКЪПМШЛ БШПЮФЕМХЕЛ Х НАЗЪЯМЪЕРЯЪ Б ДЕРЮКЪУ МХФЕ (ЯЛ. цК. 4 [пЕЦСКЪПМШЕ бШПЮФЕМХЪ], ЯРП. 23). нАПЮГЕЖ ОНГБНКЪЕР ПЮГКХВЮРЭ ВЮЯРХ ЯКНБ. Awk-ОПНЦПЮЛЛШ ГЮЙКЧВЮЧРЯЪ Б НДХМНВМШЕ ЙЮБШВЙХ, РЮЙ ВРН НАНКНВЙЮ МЕ АСДЕР ПЮЯЯЛЮРПХБЮРЭ ЯКЕЬХ ЙЮЙ ЯОЕЖХЮКЭМШЕ ЯХЛБНКШ НАНКНВЙХ.

бНР ВРН МЮОЕВЮРЮЕР МЮЬЮ ОПНЦПЮЛЛЮ:

$ awk '/foo/ - print $0 ""' BBS-list

a fooey 555-1234 2400/1200/300 B a foot 555-6699 1200/300 B a macfoo 555-6480
1200/300 A a sabafoo 555-2127 1200/300 C

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

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

2.4 оПХЛЕП Я ДБСЛЪ ОПЮБХКЮЛХ

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

хМРЕПОПЕРЮРНП awk ВХРЮЕР БУНДМШЕ ТЮИКШ ОНЯРПНВМН. й ЙЮФДНИ ЯРПНЙЕ ОПХЛЕМЪЧРЯЪ НАПЮГЖШ БЯЕУ ОПЮБХК. еЯКХ ЯРПНЙЕ ЯННРБЕРЯРБСЧР МЕЯЙНКЭЙН НАПЮГЖНБ, ЯННРБЕРЯРБСЧЫХЕ ДЕИЯРБХЪ БШОНКМЪЧРЯЪ Б ОНПЪДЙЕ, Б ЙНРНПНЛ НМХ ТХЦСПХПСЧР Б ОПНЦПЮЛЛЕ awk. еЯКХ БУНДМНИ ЯРПНЙЕ МЕ ЯННРБЕРЯРБСЕР МХ НДХМ НАПЮГЕЖ, МХЙЮЙХЕ ДЕИЯРБХЪ МЕ БШОНКМЪЧРЯЪ. оНЯКЕ НАПЮАНРЙХ БЯЕУ ОПЮБХК (БНГЛНФМН МХЙЮЙХУ), ЯННРБЕРЯРБСЧЫХУ ЯРПНЙЕ, ХМРЕПОПЕРЮРНП ВХРЮЕР ЯКЕДСЧЫСЧ ЯРПНЙС (НДМЮЙН, ЯЛ. ПЮГДЕК 9.7 [яКЕДСЧЫХИ НОЕПЮРНП], ЯРП. 111, Х РЮЙФЕ ПЮГДЕК 9.8 [нОЕПЮРНП nextfile], ЯРП. 112). щРН ОПНДНКФЮЕРЯЪ ДН ДНЯРХФЕМХЪ ЙНМЖЮ ТЮИКЮ.


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

/12/ - print $0 "" /21/ - print $0 ""

ЯНДЕПФХР ДБЮ ОПЮБХКЮ. нАПЮГЕЖ ОЕПБНЦН ОПЮБХКЮ ЕЯРЭ ЖЕОНВЙЮ `12', Ю ДЕИЯРБХЕ `print $0'. бРНПНЕ ОПЮБХКН ХЛЕЕР НАПЮГЕЖ `21' Х ДЕИЯРБХЕЛ РНФЕ `print $0'. йЮФДНЕ ОПЮБХКН ГЮЙКЧВЕМН Б ЯБНЧ ЯНАЯРБЕММСЧ ОЮПС ЯЙНАНЙ.

щРЮ ОПНЦПЮЛЛЮ ОЕВЮРЮЕР ЙЮФДСЧ ЯРПНЙС, ЯНДЕПФЮЫСЧ ЖЕОНВЙС `12' ХКХ ЖЕОНВЙС `21'. еЯКХ ЯРПНЙЮ ЯНДЕПФХР НАЕ ЖЕОНВЙХ, НМЮ ОЕВЮРЮЕРЯЪ ДБЮФДШ, НДХМ ПЮГ ОН ЙЮФДНЛС ОПЮБХКС. бНР ВРН АСДЕР, ЕЯКХ ЛШ БШОНКМХЛ ЩРС ОПНЦПЮЛЛС МЮ МЮХУ ДБСУ ТЮИКЮУ Я ДЮММШЛХ, `BBS-list' Х `inventory-shipped':

$ awk '/12/ - print $0 "" ? /21/ - print $0 ""' BBS-list inventory-shipped
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 core 555-2912 1200/300
C 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
a sabafoo 555-2127 1200/300 C a Jan 21 36 64 620 a Apr 21 70 74 514

гЮЛЕРЭРЕ, ВРН ЯРПНЙЮ ХГ `BBS-list', МЮВХМЮЧЫЮЪЯЪ Я `sabafoo', ОЕВЮРЮЕРЯЪ ДБЮФДШ, НДХМ ПЮГ ДКЪ ЙЮФДНЦН ОПЮБХКЮ.

2.5 аНКЕЕ ЯКНФМШИ ОПХЛЕП

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

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

ls -lg -- awk '$6 == "Nov" - sum += $5 ""
END - print sum ""'

щРЮ ОПНЦПЮЛЛЮ ОЕВЮРЮЕР НАЫЕЕ ЙНКХВЕЯРБН АЮИРНБ БН БЯЕУ ТЮИКЮУ РЕЙСЫЕЦН ЙЮРЮКНЦЮ, ЙНРНПШЕ Б ОНЯКЕДМХИ ПЮГ ЛНДХТХЖХПНБЮКХЯЭ Б мНЪАПЕ (КЧАНЦН ЦНДЮ). (б НАНКНВЙЕ яХ БЮЛ МСФМН МЮОЕВЮРЮРЭ ДБНЕРНВХЕ Х ГЮРЕЛ НАПЮРМШИ ЯКЕЬ Б ЙНМЖЕ ОЕПБНИ ЯРПНЙХ; Б POSIX-ОНДВХМЕММНИ НАНКНВЙЕ, РЮЙНИ ЙЮЙ Bourne shell ХКХ Bash, GNU Bourne-Again shell ОПХЛЕП ЛНФМН ОЕВЮРЮРЭ, ЙЮЙ ОНЙЮГЮМН.)

вЮЯРЭ `ls -lg' ЩРНЦН ОПХЛЕПЮ ЕЯРЭ ЯХЯРЕЛМЮЪ ЙНЛЮМДЮ, ЙНРНПЮЪ БШДЮЕР ЯОХЯНЙ ТЮИКНБ Б ЙЮРЮКНЦЕ, БЙКЧВЮЧЫХИ ПЮГЛЕПШ ТЮИКНБ Х ДЮРШ ХУ ОНЯКЕДМЕЦН ХГЛЕМЕМХЪ. еЕ БШУНД БШЦКЪДХР РЮЙ:

-rw-r--r-- 1 arnold user 1933 Nov 7 13:05 Makefile -rw-r--r-- 1 arnold user
10809 Nov 7 13:03 gawk.h -rw-r--r-- 1 arnold user 983 Apr 13 12:14 gawk.tab.h
-rw-r--r-- 1 arnold user 31869 Jun 15 12:20 gawk.y -rw-r--r-- 1 arnold user
22414 Nov 7 13:03 gawk1.c -rw-r--r-- 1 arnold user 37455 Nov 7 13:03 gawk2.
c -rw-r--r-- 1 arnold user 27511 Dec 9 13:07 gawk3.c -rw-r--r-- 1 arnold user
7989 Nov 7 13:03 gawk4.c

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

`$6 == "Nov"' Б МЮЬЕИ awk-ОПНЦПЮЛЛЕ ЕЯРЭ БШПЮФЕМХЕ, ЙНРНПНЕ ОПНБЕПЪЕР, ЯННРБЕРЯРБСЕР КХ ЬЕЯРНЕ ОНКЕ БШУНДЮ НР `ls -lg' ЖЕОНВЙЕ `Nov'. йЮФДШИ ПЮГ, ЙНЦДЮ ЯРПНЙЮ ХЛЕЕР ЖЕОНВЙС `Nov' ЯБНХЛ ЬЕЯРШЛ ОНКЕЛ, БШОНКМЪЕРЯЪ ДЕИЯРБХЕ `sum += $5'. нМН ДНАЮБКЪЕР ОЪРНЕ ОНКЕ (ПЮГЛЕП ТЮИКЮ) Й ОЕПЕЛЕММНИ sum. б ПЕГСКЭРЮРЕ, ЙНЦДЮ awk НЙНМВХР ВРЕМХЕ БЯЕУ БУНДМШУ ЯРПНЙ, sum АСДЕР ЯНДЕПФЮРЭ ЯСЛЛС БЯЕУ ДКХМ ТЮИКНБ, ЯРПНЙХ ЙНРНПШУ ЯННРБЕРЯРБСЧР НАПЮГЖС. (рЮЙ АСДЕР, ОНРНЛС ВРН БЯЕ ОЕПЕЛЕММШЕ awk ЮБРНЛЮРХВЕЯЙХ ХМХЖХЮКХГХПСЧРЯЪ МСКЕЛ.)

оНЯКЕ РНЦН, ЙЮЙ АСДЕР НАПЮАНРЮМЮ ОНЯКЕДМЪЪ ЯРПНЙЮ БШУНДЮ НР ls, БШОНКМЪЕРЯЪ ОПЮБХКН END Х ОЕВЮРЮЕРЯЪ ГМЮВЕМХЕ sum. б МЮЬЕЛ ОПХЛЕПЕ ЩРН АСДЕР 80600. хЯОНКЭГНБЮММЮЪ ГДЕЯЭ АНКЕЕ ЯКНФМЮЪ awk-РЕУМХЙЮ НАЗЪЯМЪЕРЯЪ ДЮКЭЬЕ (ЯЛ. ПЮГДЕК 8.2 [нАГНП ДЕИЯРБХИ], ЯРП 102). оПЕФДЕ ВЕЛ ОЕПЕУНДХРЭ Й АНКЕЕ ЯКНФМНЛС awk-ОПНЦПЮЛЛХПНБЮМХЧ, БШ ДНКФМШ СГМЮРЭ, ЙЮЙ awk НАПЮАЮРШБЮЕР БЮЬ ББНД Х БШДЮЕР БЮЬ БШУНД. лЮМХОСКХПСЪ ОНКЪЛХ Х ХЯОНКЭГСЪ НОЕПЮРНПШ ОЕВЮРХ, БШ ЛНФЕРЕ ОНКСВЮРЭ НВЕМЭ ОНКЕГМШЕ Х БОЕВЮРКЪЧЫЕ БШЦКЪДЪЫХЕ НРВЕРШ.

2.6 awk НОЕПЮРНПШ МЮД ЯРПНЙЮЛХ

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

вЮЫЕ БЯЕЦН ЙЮФДЮЪ ЯРПНЙЮ Б awk-ОПНЦПЮЛЛЕ ЕЯРЭ НРДЕКЭМШИ НОЕПЮРНП ХКХ НРДЕКЭМНЕ ОПЮБХКН, ОНДНАМН ЯКЕДСЧЫЕЛС:

awk '/12/ - print $0 ""

/21/ - print $0 ""' BBS-list inventory-shipped

нДМЮЙН,  gawk ХЦМНПХПСЕР ОЕПЕУНДШ Й МНБНИ ЯРПНЙЕ ОНЯКЕ ЙЮФДНЦН ХГ ЯКЕДСЧЫХУ
ЯКНБ
, - ? : ---- &&

Х ДЕКЮЕР newline Б ЙЮФДНИ РНВЙЕ, ПЮЯЯЛЮРПХБЮЕЛНИ ЙЮЙ ЙНМЕЖ НОЕПЮРНПЮ. (пЮЯЫЕОКЕМХЕ ЯРПНЙ ОНЯКЕ `?' Х `:' ЕЯРЭ ОПНЯРЕИЬЕЕ ПЮЯЬХПЕМХЕ gawk. сОНЛЪМСРШЕ ГДЕЯЭ `?' Х `:' ЕЯРЭ РПЕУНОЕПЮМДМШЕ СЯКНБМШЕ БШПЮФЕМХЪ, НОХЯЮММШЕ Б ПЮГДЕКЕ 7.12 [сЯКНБМШЕ БШПЮФЕМХЪ], ЯРП. 92.) еЯКХ БШ УНРХРЕ ПЮЯЫЕОХРЭ ЕДХМШИ НОЕПЮРНП МЮ ДБЕ ЯРПНЙХ Б РНВЙЕ, ЦДЕ ОЕПЕУНД Й МНБНИ ЯРПНЙЕ НГМЮВЮК АШ ЕЦН ЙНМЕЖ, МСФМН ОПНДНКФХРЭ ЕЦН, ГЮЙНМВХБ ОЕПБСЧ ЯРПНЙС ЯХЛБНКНЛ НАПЮРМНЦН ЯКЕЬ, `"'. нАПЮРМШИ ЯКЕЬ ДНКФЕМ АШРЭ ОНЯКЕДМХЛ ЯХЛБНКНЛ ЯРПНЙХ, ВРНАШ АШРЭ ПЮЯОНГМЮММШЛ ЙЮЙ ЯХЛБНК ОПНДНКФЕМХЪ. щРН ПЮГПЕЬЮЕРЯЪ ЮАЯНКЧРМН БЕГДЕ Б НОЕПЮРНПЕ, ДЮФЕ БМСРПХ ЖЕОНВЙХ ХКХ ПЕЦСКЪПМНЦН БШПЮФЕМХЪ.

мЮОПХЛЕП:

awk '/This regular expression is too long, so continue it"

on the next line/ - print $1 ""'

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

бМХЛЮМХЕ: ОПНДНКФЕМХЕ Я НАПЮРМШЛ ЯКЕЬ МЕ ПЮАНРЮЕР, ЙЮЙ НОХЯЮМН БШЬЕ, Я НАНКНВЙНИ яХ. оПНДНКФЕМХЕ Я НАПЮРМШЛ ЯКЕЬ ПЮАНРЮЕР Б awk-ОПНЦПЮЛЛЮУ Б ТЮИКЮУ Х РЮЙФЕ Б ЙНПНРЙХУ ОПНЦПЮЛЛЮУ ОПХ СЯКНБХХ ХЯОНКЭГНБЮМХЪ POSIX-ОНДВХМЕММНИ НАНКНВЙХ, РЮЙНИ ЙЮЙ Bourne shell ХКХ Bash, GNU Bourne-Again shell. мН яХ-НАНКНВЙЮ (csh) БЕДЕР ЯЕАЪ МЕ РЮЙ! рЮЛ БШ ДНКФМШ БГЪРЭ ДБЮ НАПЮРМШУ ЯКЕЬ ОНДПЪД Х ОЕПЕУНД Й МНБНИ ЯРПНЙЕ. гЮЛЕРХЛ РЮЙФЕ, ВРН ОПХ ХЯОНКЭГНБЮМХХ яХ-НАНКНВЙХ ЙЮФДЮЪ newline Б БЮЬЕИ awk-ОПНЦПЮЛЛЕ ДНКФМЮ ГЮЙЮМВХБЮРЭЯЪ НАПЮРМШЛ ЯКЕЬЕЛ.

 мЮОПХЛЕП:

% awk 'BEGIN - " ? print "" ? "hello, world" "
? ""'
a hello, world

гДЕЯЭ `%' and `?' ЕЯРЭ ОЕПБХВМЮЪ Х БРНПХВМЮЪ ОНДЯЙЮГЙХ яХ-НАНКНВЙХ, ЮМЮКНЦХВМШЕ ЯРЮМДЮПРМШЛ `$' Х `?'.

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

гЮЛЕРХЛ, ВРН ОПНДНКФЕМХЕ НАПЮРМШЛ ЯКЕЬЕЛ Х ЙНЛЛЕМРЮПХХ МЕКЭГЪ ЯЛЕЬХБЮРЭ. йЮФДШИ `#' ДКЪ awk ЕЯРЭ МЮВЮКН ЙНЛЛЕМРЮПХЪ, НМ ХЦМНПХПСЕР НЯРЮРНЙ ЯРПНЙХ.


мЮОПХЛЕП:

$ gawk 'BEGIN - print "dont panic" # a friendly " ? BEGIN rule ? ""'

error gawk: cmd. line:2: BEGIN rule error gawk: cmd. line:2: ^ parse error

гДЕЯЭ ЙЮФЕРЯЪ, ВРН НАПЮРМШИ ЯКЕЬ ОПНДНКФЮЕР ЙНЛЛЕМРЮПХИ МЮ ЯКЕДСЧЫСЧ ЯРПНЙС. нДМЮЙН, ЙНЛАХМЮЖХЪ НАПЮРМШИ ЯКЕЬ-МНБЮЪ ЯРПНЙЮ МЕ ГЮЛЕВЮЕРЯЪ, РЮЙ ЙЮЙ НРМНЯХРЯЪ Й ЙНЛЛЕМРЮПХЧ. оНЩРНЛС `BEGIN' НРЛЕВЮЕРЯЪ ЙЮЙ ЯХМРЮЙЯХВЕЯЙЮЪ НЬХАЙЮ.

йНЦДЮ awk-НОЕПЮРНПШ Б ОПЕДЕКЮУ НДМНЦН ОПЮБХКЮ ЙНПНРЙХ, БШ ЛНФЕРЕ ПЮГЛЕЯРХРЭ ХУ АНКЕЕ НДМНЦН Б ЯРПНЙЕ. дКЪ ЩРНЦН НОЕПЮРНПШ ПЮГДЕКЪЧРЯЪ РНВЙЮЛХ Я ГЮОЪРНИ `;'. щРН РЮЙФЕ ОПХКНФХЛН Й ЯЮЛХЛ ОПЮБХКЮЛ. рЮЙ, ОПЕДШДСЫЮЪ ОПНЦПЮЛЛЮ ЛНФЕР АШРЭ МЮОХЯЮМЮ Б ТНПЛЕ:

/12/ - print $0 "" ; /21/ - print $0 ""

гюлевюмхе: РПЕАНБЮМХЕ ПЮГДЕКЪРЭ ОПЮБХКЮ Б НДМНИ Х РНИ ФЕ ЯРПНЙЕ ДБНЕРНВХЪЛХ НРЯСРЯРБНБЮКН Б НПХЦХМЮКЭМНЛ ЪГШЙЕ awk; НМН АШКН ДНАЮБКЕМН ДКЪ ЯНБЛЕЯРХЛНЯРХ Я РПЮЙРНБЙНИ НОЕПЮРНПНБ БМСРПХ НДМНЦН ДЕИЯРБХЪ.

2.7 дПСЦХЕ НЯНАЕММНЯРХ awk

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

бДНАЮБНЙ, awk ХЛЕЕР МЕЙНРНПНЕ ЙНКХВЕЯРБН БЯРПНЕММШУ ТСМЙЖХИ ДКЪ НАЕЯОЕВЕМХЪ НАЫХУ БШВХЯКХРЕКЭМШУ Х ЯРПНЙНБШУ НОЕПЮЖХИ. оПХ ПЮГБХРХХ МЮЬХУ ОПЕДЯРЮБКЕМХИ Н ЪГШЙЕ awk ЛШ ББЕДЕЛ АНКЭЬХМЯРБН ОЕПЕЛЕММШУ Х ЛМНЦХЕ ХГ ТСМЙЖХИ. бЯЕ НМХ ЯХЯРЕЛЮРХВЕЯЙХ НОПЕДЕКЕМШ Б цК. 10 [бЯРПНЕММШЕ ОЕПЕЛЕММШЕ], ЯРП. 115 Х цК. 12 [бЯРПНЕММШЕ ТСМЙЖХХ], ЯРП. 135.

2.8 йНЦДЮ ХЯОНКЭГНБЮРЭ awk

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

бШ ЛНФЕРЕ СДХБХРЭЯЪ, МЮЯЙНКЭЙН awk ЛНФЕР АШРЭ ОНКЕГЕМ ДКЪ БЮЯ. хЯОНКЭГСЪ СРХКХРШ, ЯКНФМШЕ НАПЮГЖШ, ПЮГДЕКХРЕКХ ОНКЕИ, ЮПХТЛЕРХВЕЯЙХЕ НОЕПЮРНПШ, ЙПХРЕПХХ НРАНПЮ, БШ ЛНФЕРЕ ОНКСВХРЭ ЦНПЮГДН АНКЕЕ ЯКНФМШИ ПЕГСКЭРЮР. ъГШЙ awk НВЕМЭ ОНКЕГЕМ ДКЪ ОНКСВЕМХЪ НРВЕРНБ Н АНКЭЬХУ ЙНКХВЕЯРБЮУ ЯШПШУ ДЮММШУ, РЮЙХУ ЙЮЙ НАНАЫЕМХЕ ХМТНПЛЮЖХХ, ОНКСВЕММНИ НР ДПСЦХУ СРХКХР, ОНДНАМШУ ls. (яЛ. ПЮГДЕК 2.5 [аНКЕЕ ЯКНФМШИ ОПХЛЕП], ЯРП. 15.)

оПНЦПЮЛЛШ, МЮОХЯЮММШЕ ЯПЕДЯРБЮЛХ awk, НАШВМН ЛМНЦН ЙНПНВЕ ОПНЦПЮЛЛ, МЮОХЯЮММШУ МЮ ДПСЦХУ ЪГШЙЮУ. щРН ДЕКЮЕР awk-ОПНЦПЮЛЛШ КЕЦЙН ЯНЯРЮБКЪЕЛШЛХ Х ХЯОНКЭГСЕЛШЛХ. вЮЯРН НМХ ЯНЯРЮБКЪЧРЯЪ ОПЪЛН МЮ РЕПЛХМЮКЕ, ХЯОНКЭГСЧРЯЪ НДХМ ПЮГ Х ГЮРЕЛ ГЮАШБЮЧРЯЪ. оНЯЙНКЭЙС awk-ОПНЦПЮЛЛШ ХМРЕПОПЕРХПСЧРЯЪ, БШ ХГАЕЦЮЕРЕ (НАШВМН ДКХММНЦН) ЩРЮОЮ ЙНЛОХКЪЖХХ Б НАШВМНЛ ЖХЙКЕ ПЕДЮЙРХПНБЮМХЕ-ЙНЛОХКЪЖХЪ- РЕЯРХПНБЮМХЕ-НРКЮДЙЮ ОПХ ЯНГДЮМХХ ОПНЦПЮЛЛМНЦН НАЕЯОЕВЕМХЪ.

яКНФМШЕ ОПНЦПЮЛЛШ ОХЬСРЯЪ МЮ awk Я ХЯОНКЭГНБЮМХЕЛ ОНКМНЦН МЮЯРПЮХБЮЕЛНЦН ЮЯЯЕЛАКЕПЮ ДКЪ БНЯЭЛХАХРНБШУ ЛХЙПНОПНЖЕЯЯНПНБ (ЯЛ. ДЕРЮКХ Б Appendix D [цКНЯЯЮПХИ], ЯРП. 301) Х ЮЯЯЕЛАКЕПЮ ЛХЙПНЙНДЮ ДКЪ Prolog-ЙНЛОЭЧРЕПНБ ЯОЕЖХЮКЭМНЦН МЮГМЮВЕМХЪ. нДМЮЙН, БНГЛНФМНЯРХ awk МЕ БЯЕЦДЮ ДНЯРЮРНВМШ ДКЪ ГЮДЮВ АНКЭЬНИ ЯКНФМНЯРХ. еЯКХ БЮЛ ОПХУНДХРЯЪ ОХЯЮРЭ ЯЖЕМЮПХХ awk ДКХМНИ АНКЕЕ ВЕЛ, ЯЙЮФЕЛ, МЕЯЙНКЭЙН ЯНР ЯРПНЙ, ЯКЕДСЕР ОНОПНАНБЮРЭ БНЯОНКЭГНБЮРЭЯЪ ДПСЦХЛ ОПНЦПЮЛЛМШЛ ЪГШЙНЛ. мЮОПХЛЕП, ХЯОНКЭГНБЮРЭ Emacs Lisp, ЕЯКХ БЮЛ МЕНАУНДХЛН СОНРПЕАКЪРЭ ГЮОСРЮММШЕ ЯРПНЙХ Х ЯКНФМШЕ НАПЮГЖШ. йНЛЮМДМШИ ОПНЖЕЯЯНП РЮЙФЕ ЛНФЕР ОНЛНВЭ Я ЖЕОНВЙЮЛХ Х ЯННРБЕРЯРБХЕЛ НАПЮГЖНБ; ЙПНЛЕ РНЦН, НМ ОНГБНКЪЕР ОНКМНЯРЭЧ ХЯОНКЭГНБЮРЭ ЯХЯРЕЛМШЕ СРХКХРШ. аНКЕЕ ПЮЯОПНЯРПЮМЕММШЕ ЪГШЙХ, РЮЙХЕ ЙЮЙ C, C++ Х Lisp, ОПЕДНЯРЮБКЪЧР БНГЛНФМНЯРХ ДКЪ ЯХЯРЕЛМНЦН ОПНЦПЮЛЛХПНБЮМХЪ Х ОПЕНДНКЕМХЪ ЯКНФМНЯРХ АНКЭЬХУ ОПНЦПЮЛЛ. оПНЦПЮЛЛШ МЮ ЩРХУ ЪГШЙЮУ ЛНЦСР ХЛЕРЭ АНКЭЬЕ ЯРПНЙ БУНДМНЦН ЙНДЮ, ВЕЛ ЩЙБХБЮКЕМРМШЕ awk-ОПНЦПЮЛЛШ, МН ХУ КЕЦВЕ ОНДДЕПФХБЮРЭ Х НАШВМН ПЮАНРЮЧР НМХ АНКЕЕ ЩТТЕЙРХБМН.

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

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

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