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

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

10. бЯРПНЕММШЕ ОЕПЕЛЕММШЕ

щТТЕЙРХБМНЕ AWK-ОПНЦПЮЛЛХПНБЮМХЕ

нЦКЮБКЕМХЕ

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

б ЩРНИ ЦКЮБЕ НОХЯЮМШ БЯЕ БЯРПНЕММШЕ ОЕПЕЛЕММШЕ gawk. аНКЭЬХМЯРБН ХГ МХУ НОХЯШБЮЧРЯЪ РЮЙФЕ Б ЦКЮБЮУ, ЙЮЯЮЧЫХУЯЪ ХУ НАКЮЯРЕИ ЮЙРХБМНЯРХ.

10.1 бЯРПНЕММШЕ ОЕПЕЛЕММШЕ, ЙНРНПШЕ СОПЮБКЪЧР ДЕИЯРБХЪЛХ awk

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

оПХБЕДЕЛ ЮКТЮБХРМШИ ЯОХЯНЙ ОЕПЕЛЕММШУ, ЙНРНПШЕ БШ ЛНФЕРЕ ХГЛЕМЪРЭ ДКЪ ЙНМРПНКЪ ГЮ МЕЙНРНПШЛХ ДЕИЯРБХЪЛХ awk. оЕПЕЛЕММШЕ, ЯОЕЖХТХВМШЕ ДКЪ gawk, ОНЛЕВЕМШ ГБЕГДНВЙЮЛХ `*'.

CONVFMT

щРЮ ЖЕОНВЙЮ СОПЮБКЪЕР ОПЕБПЮЫЕМХЪЛХ ВХЯЕК Б ЖЕОНВЙХ (ЯЛ. ПЮГДЕК 7.4 [йНМБЕПЯХХ ЖЕОНВЕЙ Х ВХЯЕК], ЯРП. 81). нМЮ ПЮАНРЮЕР Б ЙЮВЕЯРБЕ ОЕПБНЦН ЮПЦСЛЕМРЮ ТСМЙЖХХ sprintf (ЯЛ. ПЮГДЕК 12.3 [бЯРПНЕММШЕ ТСМЙЖХХ ДКЪ ЛЮМХОСКЪЖХИ Я ЖЕОНВЙЮЛХ], ЯРП. 137). еЕ ГМЮВЕМХЕ ОН СЛНКВЮМХЧ ЕЯРЭ "%.6g". CONVFMT АШКЮ ББЕДЕМЮ Б ЯРЮМДЮПРЕ POSIX.

FIELDWIDTHS *

щРН ПЮГДЕКЕММШИ ОПНАЕКЮЛХ ЯОХЯНЙ ЯРНКАЖНБ, ЙНРНПШИ ЯННАЫЮЕР gawk, ЙЮЙ ПЮЯЫЕОКЪРЭ ББНД Я ТХЙЯХПНБЮММШЛХ ЦПЮМХЖЮЛХ ДКЪ ЙНКНМНЙ. щРН ЩЙЯОЕПХЛЕМРЮКЭМЮЪ БНГЛНФМНЯРЭ. оПХЯБЮХБЮМХЕ Б FIELDWIDTHS НРЛЕМЪЕР ХЯОНКЭГНБЮМХЕ FS ДКЪ ПЮГДЕКЕМХЪ ОНКЕИ. яЛ. ПЮГДЕК 5.6 [вРЕМХЕ ДЮММШУ ТХЙЯХПНБЮММНИ ЬХПХМШ], ЯРП. 49, ЯНДЕПФЮЫХИ ДЕРЮКХ.

еЯКХ gawk ПЮАНРЮЕР Б ПЕФХЛЕ ЯНБЛЕЯРХЛНЯРХ (ЯЛ. ПЮГДЕК 14.1 [оЮПЮЛЕРПШ ЙНЛЮМДМНИ ЯРПНЙХ], ЯРП.161), РН FIELDWIDTHS МЕ НЙЮГШБЮЕР ЯОЕЖХЮКЭМНЦН БКХЪМХЪ Х НОЕПЮЖХХ ОН БШДЕКЕМХЧ ОНКЕИ ОПНХГБНДЪРЯЪ РНКЭЙН МЮ НЯМНБЕ ГМЮВЕМХЪ FS.

FS

FS ОПЕДЯРЮБКЪЕР БУНДМНИ ПЮГДЕКХРЕКЭ ОНКЕИ (ЯЛ. ПЮГДЕК 5.5 [сЙЮГЮМХЪ РНЦН, ЙЮЙ ПЮГДЕКЪЧРЯЪ ОНКЪ], ЯРП. 44). еЕ ГМЮВЕМХЕ ЕЯРЭ НДМН-ЯХЛБНКЭМЮЪ ЖЕОНВЙЮ ХКХ ЛМНЦН ЯХЛБНКЭМНЕ ПЕЦСКЪПМНЕ БШПЮФЕМХЕ, ЙНРНПНЕ ЯННРБЕРЯРБСЕР ПЮГДЕКХРЕКЪЛ ЛЕФДС ОНКЪЛХ Б БУНДМНИ ГЮОХЯХ. еЯКХ ГМЮВЕМХЕ ЕЯРЭ ОСЯРЮЪ ЯРПНЙЮ (""), РН ЙЮФДШИ ЯХЛБНК Б ГЮОХЯХ ПЮЯЯЛЮРПХБЮЕРЯЪ ЙЮЙ НРДЕКЭМНЕ ОНКЕ. гМЮВЕМХЕ ЕЕ ОН СЛНКВЮМХЧ ЕЯРЭ " ", ЖЕОНВЙЮ ХГ НДМНЦН ОПНАЕКЮ. йЮЙ ЯОЕЖХЮКЭМНЕ ХЯЙКЧВЕМХЕ, ЩРН ГМЮВЕМХЕ ОНДПЮГСЛЕБЮЕР, ВРН БЯЪЙЮЪ ОНЯКЕДНБЮРЕКЭМНЯРЭ ОПНАЕКНБ, ЯХЛБНКНБ РЮАСКЪЖХХ Х/ХКХ newlines ЕЯРЭ НРДЕКЭМШИ ПЮГДЕКХРЕКЭ.

нМН РЮЙФЕ ОНАСФДЮЕР ХЦМНПХПНБЮРЭ ОПНАЕКШ, ГМЮЙХ РЮАСКЪЖХХ Х newlines Б МЮВЮКЕ Х ЙНМЖЕ ГЮОХЯХ. гМЮВЕМХЕ FS ЛНФМН СЯРЮМЮБКХБЮРЭ ХГ ЙНЛЮМДМНИ ЯРПНЙХ Я ОНЛНЫЭЧ ОЮПЮЛЕРПЮ `-F':

awk -F, 'program' input-files

еЯКХ gawk ХЯОНКЭГСЕР FIELDWIDTHS ДКЪ ПЮГДЕКЕМХЪ ОНКЕИ, РН ОПХЯБЮХБЮМХЕ ГМЮВЕМХЪ ОЕПЕЛЕММНИ FS ГЮЯРЮБХР gawk БНГБПЮРХРЭЯЪ Й МНПЛЮКЭМНЛС, МЮ НЯМНБЕ FS, ПЮГДЕКЕМХЧ ОНКЕИ. оПНЯРНИ ОСРЭ ДКЪ ЩРНЦН ОПНЯРН МЮОХЯЮРЭ `FS = FS', БНГЛНФМН, Я ОНЪЯМХРЕКЭМШЛ ЙНЛЛЕМРЮПХЕЛ.

IGNORECASE *

еЯКХ ГМЮВЕМХЕ IGNORECASE МЕ МНКЭ Х МЕ ОСЯРН, РН БЯЕ ЯПЮБМЕМХЪ ЖЕОНВЕЙ Х НОПЕДЕКЕМХЪ ЯННРБЕРЯРБХИ ПЕЦСКЪПМШЛ БШПЮФЕМХЪЛ АСДСР МЕГЮБХЯХЛШ НР ПЕЦХЯРПЮ. рЮЙ, Б ЯННРБЕРЯРБХЕ regexp ОН `~' Х `!~', ТСМЙЖХЪ gensub, gsub, index, match, split Х sub, Б НЙНМВЮМХЪУ ГЮОХЯЕИ ОН RS Х ПЮГДЕКЕМХЧ ОНКЕИ ОН FS --- БЯЧДС АСДЕР ХЦМНПХПНБЮРЭЯЪ ПЕЦХЯРП БН БЯЕУ НОЕПЮЖХЪУ. гМЮВЕМХЕ IGNORECASE МЕ БКХЪЕР МЮ ХМДЕЙЯЮЖХЧ Б ЛЮЯЯХБЮУ. яЛ. ПЮГДЕК 4.5 [вСБЯРБХРЕКЭМНЯРЭ Й ПЕЦХЯРПС Б ЯННРБЕРЯРБХЪУ], ЯРП. 33. еЯКХ gawk ПЮАНРЮЕР Б ПЕФХЛЕ ЯНБЛЕЯРХЛНЯРХ, (ЯЛ. ПЮГДЕК 14.1 [оЮПЮЛЕРПШ ЙНЛЮМДМНИ ЯРПНЙХ], ЯРП.161), РН IGNORECASE МЕ ХЛЕЕР ЯОЕЖХЮКЭМНЦН ГМЮВЕМХЪ Х ЖЕОНВЙХ Х НОЕПЮЖХХ Я regexp ВСБЯРБХРЕКЭМШ Й ПЕЦХЯРПС.

OFMT

щРЮ ЖЕОНВЙЮ СОПЮБКЪЕР ОПЕБПЮЫЕМХЪЛХ ВХЯЕК Б ЖЕОНВЙХ (ЯЛ. ПЮГДЕК 7.4 [ЙНМБЕПЯХХ ЖЕОНВЕЙ Х ВХЯЕК], ЯРП. 81) ОПХ ОЕВЮРХ ОН НОЕПЮРНПС print. тЮЙРХВЕЯЙХ НМЮ ПЮАНРЮЕР ЙЮЙ ОЕПБШИ ЮПЦСЛЕМР ТСМЙЖХХ sprintf (ЯЛ. ПЮГДЕК 12.3 [бЯРПНЕММШЕ ТСМЙЖХХ ДКЪ ЛЮМХОСКЪЖХИ Я ЖЕОНВЙЮЛХ], ЯРП. 137). еЕ ГМЮВЕМХЕ ОН СЛНКВЮМХЧ ЕЯРЭ "%.6g". пЮММХЕ БЕПЯХХ awk РЮЙФЕ ХЯОНКЭГНБЮКХ OFMT ДКЪ ЯОЕЖХТХЙЮЖХХ ТНПЛЮРЮ ОПХ ОПЕБПЮЫЕМХХ ВХЯЕК Б ЖЕОНВЙХ Б НАЫХУ БШПЮФЕМХЪУ; РЕОЕПЭ ЩРН ДЕКЮЕРЯЪ ЯНЦКЮЯМН ОЕПЕЛЕММНИ CONVFMT.

OFS

щРН БШУНДМНИ ПЮГДЕКХРЕКЭ ОНКЕИ (ЯЛ. ПЮГДЕК 6.3 [бШУНДМШЕ ПЮГДЕКХРЕКХ], ЯРП. 63). нМ ПЮГДЕКЪЕР ОНКЪ МЮ БШУНДЕ Б НОЕПЮРНПЕ ОЕВЮРХ. оН СЛНКВЮМХЧ ХЛЕЕР ГМЮВЕМХЕ " ", ЖЕОНВЙЮ ХГ НДМНЦН ОПНАЕКЮ.

ORS

щРН БШУНДМНИ ПЮГДЕКХРЕКЭ ГЮОХЯЕИ. нМ БШДЮЕРЯЪ Б ЙНМЖЕ ПЕГСКЭРЮРЮ НОЕПЮРНПЮ ОЕВЮРХ. оН СЛНКВЮМХЧ ЕЦН ГМЮВЕМХЕ ЕЯРЭ ""n". (яЛ. ПЮГДЕК 6.3 [бШУНДМНИ ПЮГДЕКХРЕКЭ, ЯРП. 63.)

RS

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

SUBSEP

SUBSEP ЕЯРЭ ПЮГДЕКХРЕКЭ ХМДЕЙЯНБ. оН СЛНКВЮМХЧ НМ ПЮБЕМ ""034" Х ХЯОНКЭГСЕРЯЪ ДКЪ ПЮГДЕКЕМХЪ ХМДЕЙЯНБ Б ЩКЕЛЕМРЮУ ЛМНЦНЛЕПМНЦН ЛЮЯЯХБЮ. рЮЙ, БШПЮФЕМХЕ foo["A", "B"] ТЮЙРХВЕЯЙХ ЕЯРЭ foo["A"034B"] (ЯЛ. ПЮГДЕК 11.9 [лМНЦНЛЕПМШЕ ЛЮЯЯХБШ], ЯРП. 130).

10.2 бЯРПНЕММШЕ ОЕПЕЛЕММШЕ, ЙНРНПШЕ ОЕПЕДЮЧР ХМТНПЛЮЖХЧ

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

оПХБЕДЕЛ ЮКТЮБХРМШИ ЯОХЯНЙ ОЕПЕЛЕММШУ, ЙНРНПШЕ awk СЯРЮМЮБКХБЮЕР ЮБРНЛЮРХВЕЯЙХ Б НОПЕДЕКЕММШУ ЯКСВЮЪУ ДКЪ ОЕПЕДЮВХ ХМТНПЛЮЖХХ БЮЬЕИ ОПНЦПЮЛЛЕ. оЕПЕЛЕММШЕ, ЯОЕЖХТХВМШЕ ДКЪ awk, НРЛЕВЕМШ ГБЕГДНВЙНИ, `*'.

ARGC ARGV

юПЦСЛЕМРШ ЙНЛЮМДМНИ ЯРПНЙХ, ДНЯРСОМШЕ awk-ОПНЦПЮЛЛЮЛ, УПЮМЪРЯЪ Б ЛЮЯЯХБЕ Я ХЛЕМЕЛ ARGV. ARGC ЕЯРЭ ВХЯКН ОПХЯСРЯРБСЧЫХУ ЮПЦСЛЕМРНБ ЙНЛЮМДМНИ ЯРПНЙХ. яЛ. ПЮГДЕК 14.2 [дПСЦХЕ ЮПЦСЛЕМРШ ЙНЛЮМДМНИ ЯРПНЙХ], ЯРП. 165. б НРКХВХЕ НР АНКЭЬХМЯРБЮ ЛЮЯЯХБНБ awk, ARGV ХМДЕЙЯХПСЕРЯЪ НР 0 ДН ARGC \Gamma 1.

мЮОПХЛЕП:

$ awk 'BEGIN - ? for (i = 0; i ! ARGC; i++) ? print ARGV[i] ? ""'&
 inventory-shipped BBS-list
a awk
a inventory-shipped
a BBS-list

б ЩРНЛ ОПХЛЕПЕ ARGV[0] ЯНДЕПФХР "awk", ARGV[1] ЯНДЕПФХР "inventory-shipped", Ю ARGV[2] ЯНДЕПФХР "BBS-list". гМЮВЕМХЕ ARGC ЕЯРЭ РПХ, МЮ НДХМ АНКЭЬЕ ВЕЛ ХМДЕЙЯ ОНЯКЕДМЕЦН ЩКЕЛЕМРЮ Б ARGV, ОНЯЙНКЭЙС ЩКЕЛЕМРШ МСЛЕПСЧРЯЪ Я МСКЪ. хЛЕМЮ ARGC Х ARGV, РЮЙФЕ ЙЮЙ ЯНЦКЮЬЕМХЕ НА ХМДЕЙЯЮЖХХ ЛЮЯЯХБЮ НР 0 ДН ARGC \Gamma 1, БГЪРШ ХГ ЛЕРНДЮ ЪГШЙЮ CХ ДКЪ ДНЯРСОЮ Й ЩКЕЛЕМРЮЛ ЙНЛЮМДМНИ ЯРПНЙХ. яЛ. ПЮГДЕК 10.3 [хЯОНКЭГНБЮМХЕ ARGC Х ARGV], ЯРП. 120, ДКЪ ЯБЕДЕМХИ Н РНЛ, ЙЮЙ awk ХЯОНКЭГСЕР ЩРХ ОЕПЕЛЕММШЕ.

ARGIND *

хМДЕЙЯ Б ARGV РЕЙСЫЕЦН НАПЮАЮРШБЮЕЛНЦН ТЮИКЮ. йЮФДШИ ПЮГ, ЙНЦДЮ gawk НРЙПШБЮЕР МНБШИ ТЮИК Я ДЮММШЛХ ДКЪ НАПЮАНРЙХ, НМ СЯРЮМЮБКХБЮЕР ARGIND МЮ ХМДЕЙЯ ХЛЕМХ ЩРНЦН ТЮИКЮ Б ARGV. йНЦДЮ gawk НАПЮАЮРШБЮЕР БУНДМШЕ ТЮИКШ, БШПЮФЕМХЕ `FILENAME == ARGV[ARGIND]' БЯЕЦДЮ ХЛЕЕР ГМЮВЕМХЕ true.

щРЮ ОЕПЕЛЕММЮЪ ОНКЕГМЮ ОПХ НАПЮАНРЙЕ ТЮИКНБ; НМЮ ДЮЕР БНГЛНФМНЯРЭ СГМЮРЭ, ЙЮЙ ДЮКЕЙН ОПНЦПЮЛЛЮ ОПНДБХМСКЮЯЭ Б ЯОХЯЙЕ ТЮИКНБ Я ДЮММШЛХ Х ПЮГКХВЮРЭ ОНЯКЕДНБЮРЕКЭМШЕ ОНЪБКЕМХЪ РНЦН ФЕ ХЛЕМХ ТЮИКЮ Б ЙНЛЮМДМНИ ЯРПНЙЕ. оНЯЙНКЭЙС БШ ЛНФЕРЕ ХГЛЕМЪРЭ ГМЮВЕМХЕ ARGIND Б БЮЬЕИ awk-ОПНЦПЮЛЛЕ, gawk АСДЕР ЮБРНЛЮРХВЕЯЙХ СЯРЮМЮБКХБЮРЭ ЕЕ МЮ МНБНЕ ГМЮВЕМХЕ, ЙНЦДЮ НРЙПШБЮЕРЯЪ ЯКЕДСЧЫХИ ТЮИК. щРЮ ОЕПЕЛЕММЮЪ ЪБКЪЕРЯЪ ПЮЯЬХПЕМХЕЛ Б gawk. б ДПСЦХУ ПЕЮКХГЮЖХЪУ awk ХКХ Б gawk Б ПЕФХЛЕ ЯНБЛЕЯРХЛНЯРХ (ЯЛ. ПЮГДЕК 14.1 [оЮПЮЛЕРП ЙНЛЮМДМНИ ЯРПНЙХ], ЯРП. 161), ЕЕ МЕР.

ENVIRON

бЯОНЛНЦЮРЕКЭМШИ ЛЮЯЯХБ, ЙНРНПШИ ЯНДЕПФХР ДЮММШЕ НА НЙПСФЕМХХ. еЦН ХМДЕЙЯШ --- ХЛЕМЮ ОЕПЕЛЕММШУ НЙПСФЕМХЪ. гМЮВЕМХЪ ЕЯРЭ ГМЮВЕМХЪ МЕЙНРНПШУ ОЕПЕЛЕММШУ НЙПСФЕМХЪ. мЮОПХЛЕП, ENVIRON["HOME"] ЛНФЕР АШРЭ `/home/arnold'. хГЛЕМЕМХЪ Б ЩРНЛ ЛЮЯЯХБЕ МЕ БКХЪЧР МЮ НЙПСФЕМХЕ, ОЕПЕДЮБЮЕЛНЕ ЙЮЙХЛ-МХАСДЭ ОПНЦПЮЛЛЮЛ, ЙНРНПШЕ awk ЛНФЕР ОНПНДХРЭ ВЕПЕГ ОЕПЕМЮОПЮБКЕМХЕ ХКХ ЯХЯРЕЛМШЛХ ЯПЕДЯРБЮЛХ. (щРН ЛНФЕР АШРЭ Б АСДСЫХУ БЕПЯХЪУ gawk.)

мЕЙНРНПШЕ НОЕПЮЖХНММШЕ ЯХЯРЕЛШ ЛНЦСР МЕ ХЛЕРЭ ОЕПЕЛЕММШУ НЙПСФЕМХЪ. мЮ РЮЙХУ ЯХЯРЕЛЮУ ЛЮЯЯХБ ENVIRON ОСЯР (ЙПНЛЕ ENVIRON["AWKPATH"]).

ERRNO *

еЯКХ ОПНХГНИДЕР ЯХЯРЕЛМШИ ЯАНИ ХКХ ОПХ ОЕПЕМЮОПЮБКЕМХХ ДКЪ getline, БН БПЕЛЪ ВРЕМХЪ ОН getline, ХКХ БН БПЕЛЪ НОЕПЮЖХХ close, РН ERRNO АСДЕР ЯНДЕПФЮРЭ ЖЕОНВЙС Я НОХЯЮМХЕЛ НЬХАЙХ.

щРЮ ОЕПЕЛЕММЮЪ ОПЕДЯРЮБКЪЕР ПЮЯЬХПЕМХЕ gawk. б ДПСЦХУ ПЕЮКХГЮЖХЪУ awk Х Б gawk Б ПЕФХЛЕ ЯНБЛЕЯРХЛНЯРХ (ЯЛ. ПЮГДЕК 14.1 [оЮПЮЛЕРПШ ЙНЛЮМДМНИ ЯРПНЙХ], ЯРП. 161) НМЮ НРЯСРЯРБСЕР.

FILENAME

щРН ХЛЪ ТЮИКЮ, ЙНРНПШИ awk ВХРЮЕР Б МЮЯРНЪЫЕЕ БПЕЛЪ. еЯКХ МХЙЮЙХЕ ТЮИКШ Я ДЮММШЛХ МЕ СЙЮГЮМШ Б ЙНЛЮМДМНИ ЯРПНЙЕ, awk ВХРЮЕР ХГ ЯРЮМДЮПРМНЦН ББНДЮ Х FILENAME ЯНДЕПФХР "-". FILENAME ХГЛЕМЪЕРЯЪ ЙЮФДШИ ПЮГ, ЙНЦДЮ ВХРЮЕРЯЪ МНБШИ ТЮИК (ЯЛ. ЦКЮБС 5 [вРЕМХЕ БУНДМШУ ТЮИКНБ], ЯРП. 37). бМСРПХ ОПЮБХКЮ BEGIN ГМЮВЕМХЕ FILENAME ЕЯРЭ "", ОНЯЙНКЭЙС Б ЩРН БПЕЛЪ ЕЫЕ МЕР НАПЮАЮРШБЮЕЛШУ БУНДМШУ ТЮИКНБ (d.c.).

FNR

FNR ЕЯРЭ МНЛЕП РЕЙСЫЕИ ГЮОХЯХ Б РЕЙСЫЕЛ ТЮИКЕ. FNR СБЕКХВХБЮЕРЯЪ ЙЮФДШИ ПЮГ, ЙНЦДЮ ВХРЮЕРЯЪ МНБЮЪ ГЮОХЯЭ (ЯЛ. ПЮГДЕК 5.8 [ъБМШИ ББНД ОН getline], ЯРП. 53). нМЮ ХМХЖХЮКХГХПСЕРЯЪ МСКЕЛ ЙЮФДШИ ПЮГ, ЙНЦДЮ МЮВХМЮЕРЯЪ МНБШИ БУНДМНИ ТЮИК.

мЕЙНРНПШЕ ПЮММХЕ ПЕЮКХГЮЖХХ Unix awk ХМХЖХЮКХГХПНБЮКХ FILENAME ГМЮВЕМХЕЛ "-", ДЮФЕ ЕЯКХ ХЛЕЧРЯЪ ТЮИКШ Я ДЮММШЛХ ДКЪ НАПЮАНРЙХ. рЮЙНЕ ОНБЕДЕМХЕ АШКН МЕБЕПМШЛ, Х МЕ МЮДН МН МЕЦН ОНКЮЦЮРЭЯЪ Б БЮЬХУ ОПНЦПЮЛЛЮУ.

NF

NF ЯНДЕПФХР ЙНКХВЕЯРБН ОНКЕИ Б РЕЙСЫЕИ БУНДМНИ ГЮОХЯХ. NF СЯРЮМЮБКХБЮЕРЯЪ ЙЮФДШИ ПЮГ, ЙНЦДЮ ВХРЮЕРЯЪ МНБЮЪ ГЮОХЯЭ, ЙНЦДЮ ЯНГДЮЕРЯЪ МНБНЕ ОНКЕ ХКХ ЙНЦДЮ ЛЕМЪЕРЯЪ $0 (ЯЛ. ПЮГДЕК 5.2 [хЯЯКЕДНБЮМХЕ ОНКЕИ], ЯРП. 40).

NR

щРН ЙНКХВЕЯРБН БУНДМШУ ГЮОХЯЕИ, ЙНРНПШЕ awk НАПЮАНРЮКЮ Я МЮВЮКЮ БШОНКМЕМХЪ ОПНЦПЮЛЛШ (ЯЛ. ПЮГДЕК 5.1 [йЮЙ ББНД ПЮГДЕКЪЕРЯЪ МЮ ГЮОХЯХ], ЯРП. 37). NR ХГЛЕМЪЕРЯЪ ЙЮФДШИ ПЮГ, ЙНЦДЮ ВХРЮЕРЯЪ МНБЮЪ ГЮОХЯЭ.

RLENGTH

RLENGTH ЕЯРЭ ДКХМЮ ОНДЖЕОНВЙХ, БШДЕКЕММНИ ТСМЙЖХЕИ ЯННРБЕРЯРБХЪ (match function) (ЯЛ. ПЮГДЕК 12.3 [бЯРПНЕММШЕ ТСМЙЖХХ ДКЪ ДЕИЯРБХИ МЮД ЖЕОНВЙЮЛХ], ЯРП. 137). RLENGTH СЯРЮМЮБКХБЮЕРЯЪ ОПХ БШГНБЕ ТСМЙЖХХ ЯННРБЕРЯРБХЪ. еЕ ГМЮВЕМХЕ ЕЯРЭ ДКХМЮ БШДЕКЕММНИ ЖЕОНВЙХ ХКХ \Gamma 1, ЕЯКХ ЯННРБЕРЯРБХЪ МЕ НАМЮПСФЕМН.

RSTART

RSTART ЕЯРЭ МЮВЮКЭМШИ ХМДЕЙЯ Б ЯХЛБНКЮУ ОНДЖЕОНВЙХ, МЮИДЕММНИ ТСМЙЖХЕИ ЯННРБЕРЯРБХЪ (ЯЛ. ПЮГДЕК 12.3 [бЯРПНЕММШЕ ТСМЙЖХХ ДКЪ НОЕПЮЖХИ МЮД ЖЕОНВЙЮЛХ], ЯРП. 137). RSTART СЯРЮМЮБКХБЮЕРЯЪ ОПХ БШГНБЕ ТСМЙЖХХ ЯННРБЕРЯРБХЪ. еЕ ГМЮВЕМХЕ ЕЯРЭ ОНГХЖХЪ ЖЕОНВЙХ, Я ЙНРНПНИ МЮВХМЮЕРЯЪ БШДЕКЕММЮЪ ОНДЖЕОНВЙЮ, ХКХ 0, ЕЯКХ ЯННРБЕРЯРБХЪ МЕР.

RT *

RT СЯРЮМЮБКХБЮЕРЯЪ ЙЮФДШИ ПЮГ, ЙНЦДЮ ВХРЮЕРЯЪ ГЮОХЯЭ. нМЮ ЯНДЕПФХР БУНДМНИ РЕЙЯР, ЙНРНПШИ НОПЕДЕКЕМ Б RS, ПЮГДЕКХРЕКЭ ГЮОХЯЕИ. оЕПЕЛЕММЮЪ ЕЯРЭ ПЮЯЬХПЕМХЕ gawk. б ДПСЦХУ ПЕЮКХГЮЖХЪУ awk ХКХ Б gawk Б ПЕФХЛЕ ЯНБЛЕЯРХЛНЯРХ (ЯЛ. ПЮГДЕК 14.1 [оЮПЮЛЕРПШ ЙНЛЮМДМНИ ЯРПНЙХ], ЯРП. 161), НМЮ МЕ ДЕИЯРБСЕР.

гюлевюмхе Н NR Х FNR.

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

мЮОПХЛЕП:

$ echo '1 ? 2 ? 3 ? 4' -- awk 'NR == 2 - NR = 17 "" ? - print NR ""'
a 1 a 17 a 18 a 19

дН РНЦН, ЙЮЙ FNR АШКЮ ДНАЮБКЕМЮ Й ЪГШЙС awk (ЯЛ. ПЮГДЕК 17.1 [цКЮБМШЕ ХГЛЕМЕМХЪ ЛЕФДС V7 Х SVR3.1], ЯРП. 253), ЛМНЦХЕ awk-ОПНЦПЮЛШ ХЯОНКЭГНБЮКХ ЩРН ЯБНИЯРБН ДКЪ НОПЕДЕКЕМХЪ ЙНКХВЕЯРБЮ ГЮОХЯЕИ Б ТЮИКЕ, СЯРЮМЮБКХБЮЪ NR МЮ 0 ОПХ ХГЛЕМЕМХХ FILENAME.

10.3 хЯОНКЭГНБЮМХЕ ARGC Х ARGV

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

б ПЮГДЕКЕ 10.2 [бЯРПНЕММШЕ ОЕПЕЛЕММШЕ, ЙНРНПШЕ ОЕПЕДЮЧР ХМТНПЛЮЖХЧ], ЯРП. 117, ЛШ БХДЕКХ ЩРС ОПНЦПЮЛЛС, НОХЯШБЮЧЫСЧ ХМТНПЛЮЖХЧ, ЯНДЕПФЮЫСЧЯЪ Б ARGC Х ARGV:

$ awk 'BEGIN - ? for (i = 0; i ! ARGC; i++) ? print ARGV[i] ? ""'&
 inventory-shipped BBS-list
a awk
a inventory-shipped
a BBS-list

б ЩРНЛ ОПХЛЕПЕ ARGV[0] ЯНДЕПФХР "awk", ARGV[1] ЯНДЕПФХР "inventoryshipped", Х ARGV[2] ЯНДЕПФХР "BBS-list". гЮЛЕРХЛ, ВРН awk-ОПНЦПЮЛЛЮ МЕ БУНДХР Б ARGV. дПСЦХЕ ЯОЕЖХЮКЭМШЕ НОЖХХ ЙНЛЮМДМНИ ЯРПНЙХ, БЛЕЯРЕ Я ХУ ЮПЦСЛЕМРЮЛХ, РЮЙФЕ МЕ БУНДЪР. щРН БЙКЧВЮЕР ОПХЯБЮХБЮМХЪ ОЕПЕЛЕММШЛ, ЯДЕКЮММШЛ Я ОЮПЮЛЕРПНЛ `-v' (ЯЛ. ПЮГДЕК 14.1 [оЮПЮЛЕРПШ ЙНЛЮМДМНИ ЯРПНЙХ], ЯРП. 161). мНПЛЮКЭМН ОПХЯБЮХБЮМХЪ ОЕПЕЛЕММШЛ ХГ ЙНЛЮМДМНИ ЯРПНЙХ ПЮЯЯЛЮРПХБЮЧРЯЪ ЙЮЙ ЮПЦСЛЕМРШ Х ОНЙЮГШБЮЧРЯЪ Б ЛЮЯЯХБЕ ARGV.

$ cat showargs.awk
a BEGIN -
a printf "A=%d, B=%d"n", A, B
a for (i = 0; i ! ARGC; i++)
a printf ""tARGV[%d] = %s"n", i, ARGV[i]
a ""
a END - printf "A=%d, B=%d"n", A, B "" $ awk -v A=1 -f showargs.awk B=2 /dev/null
a A=1, B=0
a ARGV[0] = awk
a ARGV[1] = B=2
a ARGV[2] = /dev/null
a A=1, B=2

бЮЬЮ ОПНЦПЮЛЛЮ ЛНФЕР ХГЛЕМХРЭ ARGC Х ЩКЕЛЕМРШ ARGV. йЮФДШИ ПЮГ, ЙНЦДЮ awk ДНЯРХЦЮЕР ЙНМЕЖ БУНДМНЦН ТЮИКЮ, НМЮ ХЯОНКЭГСЕР ЯКЕДСЧЫХИ ЩКЕЛЕМР ARGV ЙЮЙ ХЛЪ ЯКЕДСЧЫЕЦН БУНДМНЦН ТЮИКЮ. оНЛЕЫЮЪ РСДЮ ПЮГМШЕ ЖЕОНВЙХ, БЮЬЮ ОПНЦПЮЛЛЮ ЛНФЕР БЛЕЬЮРЭЯЪ Б ВРЕМХЕ ТЮИКНБ. бШ ЛНФЕРЕ ХЯОНКЭГНБЮРЭ "-" ДКЪ ОПЕДЯРЮБКЕМХЪ ЯРЮМДЮПРМНЦН ББНДЮ. гЮОНЛХМЮЪ ДНОНКМХРЕКЭМШЕ ЩКЕЛЕМРШ Х ОПНДБХЦЮЪ ARGC, ЛНФМН ГЮЯРЮБХРЭ ЕЕ ВХРЮРЭ ДНОНКМХРЕКЭМШЕ ТЮИКШ. еЯКХ СЛЕМЭЬЮРЭ ГМЮВЕМХЕ ARGC, РН АСДСР ХЯЙКЧВЕМШ БУНДМШЕ ТЮИКШ ХГ ЙНМЖЮ ЯОХЯЙЮ.

гЮОНЛХМЮЪ ЦДЕ-МХАСДЭ ЯРЮПШЕ ГМЮВЕМХЪ ARGC, БЮЬЮ ОПНЦПЮЛЛЮ ЛНФЕР РПЮЙРНБЮРЭ ХЯЙКЧВЕММШЕ ЮПЦСЛЕМРШ ЙЮЙ МЕВРН ХМНЕ, ВЕЛ ХЛЕМЮ ТЮИКНБ. вРНАШ ХЯЙКЧВХРЭ ТЮИК ХГ ЯЕПЕДХМШ ЯОХЯЙЮ, ГЮОХЬХРЕ ОСЯРСЧ ЖЕОНВЙС ("") Б ARGV МЮ ЛЕЯРН ХЛЕМХ ТЮИКЮ. хЦМНПХПНБЮРЭ ХЛЕМЮ ТЮИКНБ, ГЮЛЕМЕММШУ ОСЯРНИ ЖЕОНВЙНИ, ЕЯРЭ ЯОЕЖХЮКЭМЮЪ НЯНАЕММНЯРЭ awk.

лНФМН РЮЙФЕ ХЯОНКЭГНБЮРЭ НОЕПЮРНП delete ДКЪ СДЮКЕМХЪ ЩКЕЛЕМРНБ ХГ ARGV (ЯЛ. ПЮГДЕК 11.6 [нОЕПЮРНП delete], ЯРП. 128).

бЯЕ ЩРХ ДЕИЯРБХЪ НАШВМН ОПНХГБНДЪРЯЪ ХГ ОПЮБХКЮ BEGIN, ДН ТЮЙРХВЕЯЙНЦН МЮВЮКЮ НАПЮАНРЙХ ББНДЮ. яЛ. ПЮГДЕК 16.1.4 [пЮГДЕКЕМХЕ АНКЭЬНЦН ТЮИКЮ МЮ ВЮЯРХ], ЯРП. 217, Х ПЮГДЕК 16.1.5 [дСОКХЖХПНБЮМХЕ ПЕГСКЭРЮРЮ Б МЕЯЙНКЭЙХУ ТЮИКЮУ], ЯРП. 219, ЙЮЙ ОПХЛЕП ПЮГМШУ ОСРЕИ СДЮКЕМХЪ ЩКЕЛЕМРНБ ХГ ARGV.

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

BEGIN -
for (i = 1; i ! ARGC; i++) -
if (ARGV[i] == "-v")
verbose = 1 else if (ARGV[i] == "-d")
debug = 1 else if (ARGV[i] ~ /^-?/) -
e = sprintf("%s: unrecognized option -- %c",
ARGV[0], substr(ARGV[i], 1, ,1)) print e ? "/dev/stderr" "" else
break delete ARGV[i] "" ""

вРНАШ ТЮЙРХВЕЯЙХ ОЕПЕМЕЯРХ ОЮПЮЛЕРПШ Б awk-ОПНЦПЮЛЛС, МСФМН ГЮЙНМВХРЭ awk-ОЮПЮЛЕРПШ ЯХЛБНКЮЛХ `--' Х ГЮРЕЛ ББЕЯРХ БЮЬХ ОЮПЮЛЕРПШ, ОНДНАМН ЯКЕДСЧЫЕЛС:

awk -f myprog -- -v -d file1 file2 ...

щРН МЕ МЕНАУНДХЛН : ОНЙЮ МЕ СЙЮГЮМН `--posix', gawk ОН СЛНКВЮМХЧ ЙКЮДЕР БЯЪЙХИ МЕНОНГМЮММШИ ОЮПЮЛЕРП Б ARGV ДКЪ ХЯОНКЭГНБЮМХЪ awk-ОПНЦПЮЛЛНИ. йЮЙ РНКЭЙН НМ СБХДХР МЕГМЮЙНЛШИ ОЮПЮЛЕРП, gawk ОЕПЕЯРЮЕР ХЯЙЮРЭ ДПСЦХЕ ОЮПЮЛЕРПШ, ЙНРНПШЕ НМ ХМЮВЕ ЛНЦ АШ ПЮЯОНГМЮРЭ. оПЕДШДСЫХИ ОПХЛЕП Я gawk АШК АШ РЮЙХЛ:

gawk -f myprog -d -v file1 file2 ...

оНЯЙНКЭЙС `-d' МЕ ЕЯРЭ ОПЮБХКЭМШИ ОЮПЮЛЕРП gawk, ОНЯКЕДСЧЫЕЕ `-v' ОЕПЕДЮЕРЯЪ awk-ОПНЦПЮЛЛЕ.

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

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

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