пСЙНБНДЯРБН ОНКЭГНБЮРЕКЪ ДКЪ GNU Awk
16. оПЮЙРХВЕЯЙХЕ awk-ОПНЦПЮЛЛШ
16.2 пЮГМШЕ awk-ОПНЦПЮЛЛШщРНР ПЮГДЕК ЯНДЕПФХР ЛМНЦН ПЮГМШУ ОПНЦПЮЛЛ. мЮДЕЕЛЯЪ , ВРН БШ МЮИДЕРЕ ХУ Х ХМРЕПЕЯМШЛХ Х ОНКЕГМШЛХ. 1 хЯЯКЕДСИРЕ ЙНД ХГ ПЮГДЕКЮ 15.9 [яКЕФЕМХЕ ГЮ ЦПЮМХЖЮЛХ ТЮИКНБ Я ДЮММШЛХ], ЯРП. 185. оНВЕЛС wc ХЯОНКЭГСЕР НРДЕКЭМШЕ ОЕПЕЛЕММШЕ lines БЛЕЯРН ГМЮВЕМХЪ FNR Б endfile? 16.2.1 мЮУНФДЕМХЕ ОНБРНПМШУ ЯКНБ Б ДНЙСЛЕМРЮУнАШВМНИ НЬХАЙНИ ОПХ МЮОХЯЮМХХ АНКЭЬХУ НАЗЕЛНБ КХРЕПЮРСПМНЦН РЕЙЯРЮ ЪБКЪЕРЯЪ ЯКСВЮИМНЕ ОНБРНПЕМХЕ ЯКНБ. бШ ВЮЯРН ЛНФЕРЕ СБХДЕРЭ Б РЕЙЯРЕ ВРН-МХАСДЭ ОНДНАМНЕ РЮЙНЛС: "the the program does the following . . . ." йНЦДЮ РЕЙЯР ПЮЯОНКНФЕМ МЮ ЩЙПЮМЕ, ВЮЯРН ОНБРНПЪЧЫХЕЯЪ ЯКНБЮ ОНОЮДЮЧРЯЪ Б ЙНМЖЕ НДМНИ ЯРПНЙХ Х МЮВЮКЕ ЯКЕДСЧЫЕИ, ДЕКЮЪ ХУ РПСДМН НАМЮПСФХБЮЕЛШЛХ. оПЕДКЮЦЮЕЛЮЪ ОПНЦПЮЛЛЮ, `dupword.awk', ОПНЯЛЮРПХБЮЕР ТЮИК ОН НДМНИ ЯРПНЙЕ ГЮ ПЮГ Х ХЫЕР ЯНЯЕДМХЕ БУНФДЕМХЪ НДХМЮЙНБШУ ЯКНБ. нМЮ РЮЙФЕ ГЮОНЛХМЮЕР ОНЯКЕДМЕЕ ЯКНБН ЯРПНЙХ (Б ОЕПЕЛЕММНИ prev) ДКЪ ЯПЮБМЕМХЪ Я ОЕПБШЛ ЯКНБНЛ Б ЯКЕДСЧЫЕИ ЯРПНЙЕ. оЕПБШЕ ДБЮ НОЕПЮРНПЮ НАЕЯОЕВХБЮЧР ДКЪ ЯРПНЙ МХФМХИ ПЕЦХЯРП, РЮЙ ВРН, МЮОПХЛЕП, "The" Х "the" ЯВХРЮЧРЯЪ ПЮБМШЛХ ДПСЦ ДПСЦС. бРНПНИ НОЕПЮРНП СДЮКЪЕР БЯЕ МЕАСЙБЕММШЕ, МЕЖХТПНБШЕ Х МЕ-whitespace ЯХЛБНКШ ХГ ЯРПНЙХ, РЮЙ ВРН ОСМЙРСЮЖХЪ МЕ БКХЪЕР МЮ ЯПЮБМЕМХЕ. щРН ХМНЦДЮ ОПХБНДХР Й СЙЮГЮМХЧ ДБНИМШУ ЯКНБ, ЙНРНПШЕ МЮ ЯЮЛНЛ ДЕКЕ ПЮГКХВМШ, МН РЮЙХЕ ЯКСВЮХ ПЕДЙХ. # dupword --- МЮУНДХР ОНБРНПМШЕ ЯКНБЮ Б РЕЙЯРЕ # Arnold Robbins, arnold@gnu.org, Public Domain # December 1991 - $0 = tolower($0) gsub(/[^A-Za-z0-9 "t]/, ""); if ($1 == prev) printf("%s:%d: duplicate %s"n", FILENAME, FNR, $1) for (i = 2; i != NF; i++) if ($i == $(i-1)) printf("%s:%d: duplicate %s"n", FILENAME, FNR, $i) prev = $NF "" 16.2.2 оПНЦПЮЛЛЮ-АСДХКЭМХЙяКЕДСЧЫЮЪ ОПНЦПЮЛЛЮ --- ОПНЯРЮЪ ЛНДЕКЭ АСДХКЭМХЙЮ. бШ ГЮДЮЕРЕ ЕИ БПЕЛЪ ДМЪ Х ОЮПЮЛЕРП-ЯННАЫЕМХЕ. б СЙЮГЮММНЕ БПЕЛЪ НМЮ ОЕВЮРЮЕР ЯННАЫЕМХЕ Б ЯРЮМДЮПРМНЛ БШУНДЕ. йПНЛЕ РНЦН, ЕИ ЛНФМН СЙЮГЮРЭ, ЯЙНКЭЙН ПЮГ Х ВЕПЕГ ЙЮЙХЕ ОПНЛЕФСРЙХ БПЕЛЕМХ ОНБРНПЪРЭ ЯННАЫЕМХЕ. щРЮ ОПНЦПЮЛЛЮ ХЯОНКЭГСЕР ТСМЙЖХЧ gettimeofday ХГ ПЮГДЕКЮ 15.8 [сОПЮБКЕМХЕ БПЕЛЕМЕЛ], ЯРП. 183. бЯЪ ПЮАНРЮ ОПНДЕКШБЮЕРЯЪ Б ОПЮБХКЕ BEGIN. оЕПБЮЪ ВЮЯРЭ ЕЯРЭ ОПНБЕПЙЮ ЮПЦСЛЕМРНБ Х СЯРЮМНБЙХ ОН СЛНКВЮМХЧ: ОПНЛЕФСРНЙ ДКЪ ОНБРНПЕМХЪ, ЙНКХВЕЯРБН ОНБРНПЕМХИ, ЯННАЫЕМХЕ ДКЪ ОЕВЮРХ. еЯКХ ОНКЭГНБЮРЕКЭ ГЮДЮК ЯННАЫЕМХЕ, МН НМН МЕ ЯНДЕПФХР ASCII BEL ЯХЛБНКЮ (МЮГШБЮЕЛНЦН ЯХЛБНКНЛ "БМХЛЮМХЕ!") `"a'), РН НМ ДНАЮБКЪЕРЯЪ Й ЯННАЫЕМХЧ. (мЮ ЛМНЦХУ ЯХЯРЕЛЮУ ОЕВЮРЭ ASCII BEL ЦЕМЕПХПСЕР ГБСЙНБНИ ЯХЦМЮК. рЮЙХЛ НАПЮГНЛ, ЙНЦДЮ АСДХКЭМХЙ ЯПЮАНРЮЕР, ЯХЯРЕЛЮ ОПХБКЕЙЮЕР Й ЯЕАЕ БМХЛЮМХЕ, МЮ ЯКСВЮИ, ЕЯКХ ОНКЭГНБЮРЕКЭ МЕ ЯЛНРПХР МЮ ЙНЛОЭЧРЕП ХКХ РЕПЛХМЮК.) # alarm --- СЯРЮМНБХРЭ АСДХКЭМХЙ #Arnold Robbins, arnold@gnu.org, Public Domain # May 1993 # СОНРПЕАКЕМХЕ: alarm time [ "message" [ count [ delay ] ] ] BEGIN " - # оПНБЕПЙЮ ОПЮБХКЭМНЯРХ ЮПЦСЛЕМРНБ usage1 = "usage: alarm time ['message' [count [delay]]]" usage2 = sprintf(""t(%s) time ::= hh:mm", ARGV[1]) if (ARGC ! 2) - print usage ? "/dev/stderr" exit 1 "" else if (ARGC == 5) - delay = ARGV[4] + 0 count = ARGV[3] + 0 message = ARGV[2] "" else if (ARGC == 4) - count = ARGV[3] + 0 message = ARGV[2] "" else if (ARGC == 3) - message = ARGV[2] "" else if (ARGV[1] !~ /[0-9]?[0-9]:[0-9][0-9]/) - print usage1 ? "/dev/stderr" print usage2 ? "/dev/stderr" exit 1 "" # СЯРЮМНБЙХ ОН СЛНКВЮМХЧ if (delay == 0) delay = 180 # 3 ЛХМСРШ if (count == 0) count = 5 if (message == "") message = sprintf(""aIt is now %s!"a", ARGV[1]) else if (index(message, ""a") == 0) message = ""a" message ""a" яКЕДСЧЫЮЪ ВЮЯРЭ ЙНДЮ ОПЕБПЮЫЮЕР time Б ВЮЯШ Х ЛХМСРШ, Х ЕЯКХ ЩРН МСФМН, Б 24-ВЮЯНБНЕ БПЕЛЪ. гЮРЕЛ НМН ОПЕБПЮЫЮЕРЯЪ Б ЙНКХВЕЯРБН ЯЕЙСМД ОНЯКЕ ОНКСМНВХ. гЮРЕЛ РЕЙСЫЕЕ БПЕЛЪ ОЕПЕБНДХРЯЪ Б ЙНКХВЕЯРБН ЯЕЙСМД Я ОНКСМНВХ. пЮГМНЯРЭ ЛЕФДС МХЛХ ОНЙЮГШБЮЕР, ЙЮЙ ДНКЦН ФДЮРЭ ДН БЙКЧВЕМХЪ АСДХКЭМХЙЮ. # ПЮЯЫЕОКЕМХЕ МЮГМЮВЕММНЦН БПЕЛЕМХ split(ARGV[1], atime, ":") hour = atime[1] + 0 # ОПЕБП. Б ВХЯКН minute = atime[2] + 0 # ОПЕБП. Б ВХЯКН # ОНКСВЕМХЕ РЕЙСЫЕЦН ПЮЯЫЕОКЕММНЦН БПЕЛЕМХ gettimeofday(now) # ЕЯКХ БПЕЛЪ ГЮДЮМН ОН 12-ВЮЯНБШЛ ВЮЯЮЛ Х ОПЕБШЬЮЕР РЕЙСЫЕЕ, # МЮОПХЛЕП, `alarm 5:30' Б 9 a.m. ГМЮВХР 5:30 p.m., # РН ДНАЮБХРЭ 12 Й ПЕЮКЭМНЛС ВЮЯС if (hour ! 12 && now["hour"] ? hour) hour += 12 # СЯРЮМНБХРЭ МЮГМЮВЕММНЕ БПЕЛЪ target Б ЯЕЙСМДЮУ Я ОНКСМНВХ target = (hour * 60 * 60) + (minute * 60) # ОНКСВХРЭ РЕЙСЫЕЕ БПЕЛЪ Б ЯЕЙСМДЮУ Я ОНКСМНВХ current = (now["hour"] * 60 * 60) + " (now["minute"] * 60) + now["second"] # ЙЮЙ ДНКЦН ФДЮРЭ ОНАСДЙХ naptime = target - current if (naptime != 0) - print "time is in the past!" ? "/dev/stderr" exit 1 "" мЮЙНМЕЖ, ОПНЦПЮЛЛЮ ХЯОНКЭГСЕР ЯХЯРЕЛМСЧ ТСМЙЖХЧ (ЯЛ. ПЮГДЕК 12.4 [бЯРПНЕММШЕ ТСМЙЖХХ ББНДЮ/БШБНДЮ], ЯРП. 146) БШГНБЮ СРХКХРШ sleep. щРЮ СРХКХРЮ ОПНЯРН ФДЕР СЙЮГЮММНЕ ЙНКХВЕЯРБН ЯЕЙСМД. еЯКХ БНГБПЮЫЕММНЕ ЯНЯРНЪМХЕ МЕ 0, ОПНЦПЮЛЛЮ ЯВХРЮЕР, ВРН sleep АШКЮ СФЕ ОПЕПБЮМЮ, Х ОПЕЙПЮЫЮЕР ПЮАНРС. еЯКХ sleep БНГБПЮЫЮЕР ЯНЯРНЪМХЕ 0, РН ОПНЦПЮЛЛЮ ОЕВЮРЮЕР Б ЖХЙКЕ ЯННАЫЕМХЕ Х НОЪРЭ ХЯОНКЭГСЕР sleep ДКЪ НФХДЮМХЪ ОНБРНПЕМХЪ ЯХЦМЮКЮ ВЕПЕГ МСФМНЕ ЙНКХВЕЯРБН ЯЕЙСМД. # zzzzzz..... go away if interrupted if (system(sprintf("sleep %d", naptime)) != 0) # zzzzzzzzzzzzzz ...... БШУНД ОН ОПЕПШБЮМХЧ if (system(sprintf("sleep %d", naptime)) != 0) exit 1 # БПЕЛЪ ДКЪ ЯННАЫЕМХЪ! command = sprintf("sleep %d", delay) for (i = 1; i != count; i++) - print message # ЕЯКХ ЙНЛЮМДЮ sleep ОПЕПБЮМЮ, РН БШУНД if (system(command) != 0) break "" exit 0 "" 16.2.3 рПЮМЯКХРЕПЮЖХЪ ЯХЛБНКНБяХЯРЕЛМЮЪ СРХКХРЮ tr ОПНХГБНДХР РПЮМЯКХРЕПЮЖХЧ ЯХЛБНКНБ. мЮОПХЛЕП, НМЮ ВЮЯРН ХЯОНКЭГСЕРЯЪ ДКЪ ОЕПЕБНДЮ АСЙБ БЕПУМЕЦН ПЕЦХЯРПЮ Б ЯННРБЕРЯРБСЧЫХЕ МХФМХЕ Б ЖЕКЪУ ДЮКЭМЕИЬЕИ НАПЮАНРЙХ: ЦЕМЕПХПНБЮММШЕ ДЮММШЕ -- tr '[A-Z]' '[a-z]' -- НАПЮАНРЙЮ ДЮММШУ ... сРХКХРЕ tr ГЮДЮЧР ДБЮ ЯОХЯЙЮ ЯХЛБНКНБ, ГЮЙКЧВЕММШУ Б ЙБЮДПЮРМШЕ ЯЙНАЙХ. нАШВМН ЯОХЯЙХ АЕПСРЯЪ Б ЙЮБШВЙХ, ВРНАШ СДЕПФЮРЭ НАНКНВЙС НР ОНОШРНЙ ПЮЯЬХПЕМХЪ ТЮИКНБШУ ХЛЕМ. *2* оПХ НАПЮАНРЙЕ ББНДЮ ОЕПБШИ ЯХЛБНК ХГ ОЕПБНЦН ЯОХЯЙЕ ГЮЛЕМЪЕРЯЪ ОЕПБШЛ ЯХЛБНКНЛ БН БРНПНЛ ЯОХЯЙЕ, БРНПНИ ЯХЛБНК ХГ ОЕПБНЦН ЯОХЯЙЮ ГЮЛЕМЪЕРЯЪ БРНПШЛ ЯХЛБНКНЛ БН БРНПНЛ ЯОХЯЙЕ, Х Р.Д. еЯКХ Б ЯОХЯЙЕ "ХГ" ЯХЛБНКНБ АНКЭЬЕ ВЕЛ Б ЯОХЯЙЕ "Б", РН ОНЯКЕДМХИ ЯХЛБНК Б ЯОХЯЙЕ "Б" ХЯОНКЭГСЕРЯЪ ДКЪ НЯРЮБЬХУЯЪ ЯХЛБНКНБ ЯОХЯЙЮ "ХГ". мЕЙНРНПНЕ БПЕЛЪ МЮГЮД НДХМ ХГ ОНКЭГНБЮРЕКЕИ ОПЕДКНФХК МЮЛ ДНАЮБХРЭ Б gawk ЩРС ТСМЙЖХЧ. аСДСВХ ОПНРХБМХЙНЛ "ОНКГСВЕЦН СКСВЬХГЛЮ", Ъ МЮОХЯЮК ЯКЕДСЧЫСЧ ОПНЦПЮЛЛС, ВРНАШ ДНЙЮГЮРЭ, ВРН РПЮМЯКХРЕПЮЖХЪ ЛНФЕР НЯСЫЕЯРБКЪРЭЯЪ МЮ СПНБМЕ ОНКЭГНБЮРЕКЭЯЙХУ ТСМЙЖХИ. щРЮ ОПНЦПЮЛЛЮ МЕ РЮЙ ОНКМЮ, ЙЮЙ ЯХЯРЕЛМЮЪ СРХКХРЮ tr, МН НМЮ ЛНФЕР БШОНКМХРЭ АНКЭЬХМЯРБН ПЮАНРШ. оПНЦПЮЛЛЮ РПЮМЯКЪЖХХ ДЕЛНМЯРПХПСЕР НДМС ХГ МЕЛМНЦХУ ЯКЮАНЯРЕИ ЯРЮМДЮПРМНИ awk: ДЕИЯРБХЪ Я НРДЕКЭМШЛХ ЯХЛБНКЮЛХ НВЕМЭ АНКЕГМЕММШ, РПЕАСЪ ОНБРНПМНЦН СОНРПЕАКЕМХЪ БЯРПНЕММШУ ТСМЙЖХИ substr, index Х gsub (ЯЛ. ПЮГДЕК 12.3 [бЯРПНЕММШЕ ТСМЙЖХХ ДКЪ ДЕИЯРБХИ Я ЖЕОНВЙЮЛХ], ЯРП. 137).*3* 2 мЮ ЯРЮПШУ, МЕ-POSIX, ЯХЯРЕЛЮУ tr ВЮЯРН МЕ РПЕАСЕР, ВРНАШ ЯОХЯЙХ ГЮЙКЧВЮКХЯЭ Б ЙБЮДПЮРМШЕ ЯЙНАЙХ Х ЙЮБШВЙХ. 3 щРЮ ОПНЦПЮЛЛЮ АШКЮ МЮОХЯЮМЮ ДН РНЦН, ЙЮЙ gawk ОНКСВХКЮ БНГЛНФМНЯРЭ ОНЛЕЫЮРЭ ЙЮФДШИ ЯХЛБНК ЖЕОНВЙХ Б НРДЕКЭМШИ ЩКЕЛЕМР ЛЮЯЯХБЮ. йЮЙ Я ОНЛНЫЭЧ ЩРНЦН ЯПЕДЯРБЮ ЛНФМН СОПНЯРХРЭ ОПНЦПЮЛЛС? хЛЕЧРЯЪ ДБЕ ТСМЙЖХХ. оЕПБЮЪ ХГ МХУ, stranslate, ХЛЕЕР РПХ ЮПЦСЛЕМРЮ. яОХЯНЙ from A ЯНДЕПФХР ЯХЛБНКШ, ОНДКЕФЮЫХЕ РПЮМЯКЪЖХХ. яОХЯНЙ to A ЯНДЕПФХР ХУ НАПЮГШ ОНЯКЕ РПЮМЯКЪЖХХ. target ОПЕДЯРЮБКЪЕР ЖЕОНВЙС, ОНДКЕФЮЫСЧ РПЮМЯКЪЖХХ. юЯЯНЖХЮРХБМШЕ ЛЮЯЯХБШ ДЕКЮЧР РПЮМЯКЪЖХЧ ДНЯРЮРНВМН ОПНЯРНИ. t.ar ЯНДЕПФХР ЯХЛБНКШ "Б", ХМДЕЙЯХПНБЮММШЕ ЯХЛБНКЮЛХ "ХГ". оПНЯРНИ ЖХЙК ОЕПЕАХПЮЕР ЯХЛБНКШ "ХГ". дКЪ ЙЮФДНЦН ЯХЛБНКЮ Б "ХГ", ЕЯКХ НМ ЯНДЕПФХРЯЪ Б target, ХЯОНКЭГСЕРЯЪ ТСМЙЖХЪ gsub ДКЪ ЕЦН ГЮЛЕМШ МЮ ЯННРБЕРЯРБСЧЫХИ ЯХЛБНК. тСМЙЖХЪ translate ОПНЯРН БШГШБЮЕР stranslate, ХЯОНКЭГСЪ $0 ЙЮЙ target. цКЮБМЮЪ ОПНЦПЮЛЛЮ СЯРЮМЮБКХБЮЕР ДБЕ ЦКНАЮКЭМШУ ОЕПЕЛЕММШУ, FROM Х TO, ХГ ЙНЛЮМДМНИ ЯРПНЙХ Х ГЮРЕЛ ХГЛЕМЪЕР ARGV РЮЙ, ВРН awk АСДЕР ВХРЮРЭ ХГ ЯРЮМДЮПРМНЦН ББНДЮ. мЮЙНМЕЖ, НАПЮАЮРШБЮЧЫЕЕ ОПЮБХКН ОПНЯРН БШГШБЮЕР translate ДКЪ ЙЮФДНИ ГЮОХЯХ. # translate --- ДЕИЯРБСЕР ОНДНАМН tr # Arnold Robbins, arnold@gnu.org, Public Domain # August 1989 # ПЮГКХВХЕ: МЕ ПЮАНРЮЕР РНВМН РЮЙ , ЙЮЙ tr A-Z a-z, # мН ЕЯКХ `to' ЙНПНВЕ ВЕЛ `from', # ОНЯКЕДМХИ ЯХЛБНК Б `to' ХЯОНКЭГСЕРЯЪ ДКЪ НЯРЮРЙЮ Б `from'. function stranslate(from, to, target, lf, lt, t.ar, i, c) - lf = length(from) lt = length(to) for (i = 1; i != lt; i++) t.ar[substr(from, i, 1)] = substr(to, i, 1) if (lt ! lf) for (; i != lf; i++) t.ar[substr(from, i, 1)] = substr(to, lt, 1) for (i = 1; i != lf; i++) - c = substr(from, i, 1) if (index(target, c) ? 0) gsub(c, t.ar[c], target) "" return target "" function translate(from, to) - return $0 = stranslate(from, to, $0) "" # ЦКЮБМЮЪ ОПНЦПЮЛЛЮ BEGIN - if (ARGC ! 3) - print "usage: translate from to" ? "/dev/stderr" exit "" FROM = ARGV[1] TO = ARGV[2] ARGC = 2 ARGV[1] = "-" "" - translate(FROM, TO) print "" уНРЪ Х БНГЛНФМН ОПНХГБНДХРЭ РПЮМЯКХРЕПЮЖХЧ ЯПЕДЯРБЮЛХ ОНКЭГНБЮРЕКЭЯЙНИ ТСМЙЖХХ, ЩРН МЕДНЯРЮРНВМН ЩТТЕЙРХБМН, Х ЛШ ПЮЯЯЛЮРПХБЮКХ БНОПНЯ Н ДНАЮБКЕМХХ БЯРПНЕММНИ ТСМЙЖХХ. нДМЮЙН БЯЙНПЕ ОНЯКЕ МЮОХЯЮМХЪ ЩРНИ ОПНЦПЮЛЛШ ЛШ СГМЮКХ, ВРН System V Release 4 awk ДНАЮБХК ТСМЙЖХХ toupper Х tolower. щРХ ТСМЙЖХХ НАЕЯОЕВХБЮЧР АНКЭЬХМЯРБН ЯКСВЮЕБ, ЦДЕ МЕНАУНДХЛЮ РПЮМЯКХРЕПЮЖХЪ, РЮЙ ВРН ЛШ ПЕЬХКХ ОПНЯРН ДНАЮБХРЭ ЩРХ ТСМЙЖХХ Й gawk Х МЮ ЩРНЛ НЯРЮМНБХРЭЯЪ. нДМН НВЕБХДМНЕ СЯНБЕПЬЕМЯРБНБЮМХЕ ОПХБЕДЕММНИ ОПНЦПЮЛЛШ ЛНФЕР АШРЭ Б СЯРЮМНБЙЕ ЛЮЯЯХБЮ t.ar РНКЭЙН НДХМ ПЮГ, Б ОПЮБХКЕ BEGIN. нДМЮЙН, ЩРН ОПЕДОНКЮЦЮЕР, ВРН ЯОХЯЙХ "ХГ" Х "Б" МЕ АСДСР ЛЕМЪРЭЯЪ БН БПЕЛЪ ПЮАНРШ ОПНЦПЮЛЛШ. 16.2.4 оЕВЮРЭ ОНВРНБШУ ЪПКШЙНБщРН ОПНЦПЮЛЛЮ ХГ "ПЕЮКЭМНЦН ЛХПЮ". *4* нМЮ ВХРЮЕР ЯОХЯЙХ ХЛЕМ Х ЮДПЕЯНБ Х ЦЕМЕПХПСЕР ОНВРНБШЕ ЪПКШЙХ. йЮФДЮЪ ЯРПЮМХЖЮ ЪПКШЙНБ ЯНДЕПФХР 20 ЪПКШЙНБ, ДБЮ ОНОЕПЕЙ Х ДЕЯЪРЭ ЯБЕПУС БМХГ. юДПЕЯЮ ЦЮПЮМРХПНБЮММН МЕ ОПЕБШЬЮЧР ОЪРХ ЯРПНЙ Я ДЮММШЛХ. йЮФДШИ ЮДПЕЯ НРДЕКЪЕРЯЪ НР ЯКЕДСЧЫЕЦН ЯРПНЙНИ ОПНАЕКНБ. 4 "пЕЮКЭМШИ ЛХП" НОПЕДЕКЪЕРЯЪ ЙЮЙ " ОПНЦПЮЛЛЮ ДЕИЯРБХРЕКЭМН ХЯОНКЭГСЕРЯЪ ДКЪ ЙЮЙНЦН-РН ДЕКЮ." нЯМНБМЮЪ ХДЕЪ ЯНЯРНХР Б ВРЕМХХ ДЮММШУ ДКЪ 20 ЪПКШЙНБ. йЮФДЮЪ ЯРПНЙЮ ЙЮФДНЦН ЪПКШЙЮ ГЮОНЛХМЮЕРЯЪ Б ЛЮЯЯХБЕ ЯРПНЙ. еДХМЯРБЕММНЕ ОПЮБХКН ОПЕДМЮГМЮВЕМН ДКЪ ГЮОНКМЕМХЪ ЛЮЯЯХБЮ ЯРПНЙ Х ОЕВЮРХ ЯРПЮМХЖШ ОНЯКЕ РНЦН, ЙЮЙ АСДСР ОПНВХРЮМШ 20 ЪПКШЙНБ. оПЮБХКН BEGIN ОПНЯРН СЯРЮМЮБКХБЮЕР Б RS ОСЯРСЧ ЖЕОНВЙС, РЮЙ ВРН awk АСДЕР ПЮГДЕКЪРЭ ГЮОХЯХ ЯРПНЙЮЛХ ОПНАЕКНБ (ЯЛ. ПЮГДЕК 5.1 [йЮЙ ББНД ПЮГДЕКЪЕРЯЪ МЮ ГЮОХЯХ], ЯРП. 37). нМН СЯРЮМЮБКХБЮЕР MAXLINES МЮ 100, ОНЯЙНКЭЙС MAXLINE ЕЯРЭ ЙНКХВЕЯРБН ЯРПНЙ МЮ ЯРПЮМХЖЕ (20 * 5 = 100). аНКЭЬХМЯРБН ПЮАНРШ ДЕКЮЕР ТСМЙЖХЪ printpage. яРПНЙХ ЪПКШЙЮ ГЮОНЛХМЮЧРЯЪ ОНЯКЕДНБЮРЕКЭМН Б ЛЮЯЯХБЕ ЯРПНЙ. мН НМХ ДНКФМШ ОЕВЮРЮРЭЯЪ ЦНПХГНМРЮКЭМН; яРПНЙЮ line[1] БЯКЕД ГЮ line[6], line[2] БЯКЕД ГЮ line[7], Х Р.Д. дБЮ ЖХЙКЮ ХЯОНКЭГСЧРЯЪ ДКЪ ЩРХУ ДЕИЯРБХИ. бМЕЬМХИ ЖХЙК Я ОЮПЮЛЕРПНЛ i ХЛЕЕР ЬЮЦ Б 10 ЯРПНЙ ДЮММШУ; ЩРН ДЮЕР НДХМ ПЪД ЪПКШЙНБ. бМСРПЕММХИ ЖХЙК Я ОЮПЮЛЕРПНЛ j ОПНАЕЦЮЕР ЯРПНЙХ Б ОПЕДЕКЮУ ПЪДЮ. рЮЙ ЙЮЙ j ОПНУНДХР НР 0 ДН 4, `i+j' ЕЯРЭ j-Ъ ЯРПНЙЮ Б ПЪДС Х `i+j+5' ЕЯРЭ БУНД Б ЯКЕДСЧЫХИ ПЪД. бШБНД ГЮЙЮМВХБЮЕРЯЪ ОНДНАМН ЯКЕДСЧЫЕЛС: line 1 line 6 line 2 line 7 line 3 line 8 line 4 line 9 line 5 line 10б ГЮЙКЧВЕМХЕ, МЮ ЯРПНЙЮУ 21 Х 61, ОЕВЮРЮЕРЯЪ ДНОНКМХРЕКЭМЮЪ ОСЯРЮЪ ЯРПНЙЮ, ВРНАШ БШБНД БШПЮБМХБЮКЯЪ ОН ЪПКШЙЮЛ. щРН ГЮБХЯХР НР НЯНАЕММНЯРЕИ ХЯОНКЭГСЕЛШУ ЪПКШЙНБ Б РН БПЕЛЪ, ЙНЦДЮ ОХЯЮКЮЯЭ ОПНЦПЮЛЛЮ. бШ РЮЙФЕ СБХДХРЕ, ВРН ХЛЕЧРЯЪ ДБЕ ОСЯРШЕ ЯРПНЙХ МЮБЕПУС Х БМХГС. оПЮБХКН END СЯРПНЕМН РЮЙ, ВРН ОНДЮБКЪЕР ОНЯКЕДМЧЧ ЯРПЮМХЖС Я ЪПКШЙЮЛХ; ЙНКХВЕЯРБН ДЮММШУ ЛНФЕР АШРЭ МЕ ЙПЮРМН 20 ЪПКШЙЮЛ. # labels.awk # Arnold Robbins, arnold@gnu.org, Public Domain # June 1992 # оПНЦПЮЛЛЮ ОЕВЮРХ ЪПКШЙНБ ОН 5 ЯРПНЙ ЙЮФДШИ, # БНГЛНФМШ ОСЯРШЕ ЯРПНЙХ . яРПЮМХЖШ ЪПКШЙНБ ХЛЕЧР ОН 2 # ОСЯРШЕ ЯРПНЙХ ББЕПУС Х БМХГС. BEGIN - RS = "" ; MAXLINES = 100 "" function printpage( i, j) - if (Nlines != 0) return printf ""n"n" # header for (i = 1; i != Nlines; i += 10) - if (i == 21 ---- i == 61) print "" for (j = 0; j ! 5; j++) - if (i + j ? MAXLINES) break printf " %-41s %s"n", line[i+j], line[i+j+5] "" print "" "" printf ""n"n" # footer for (i in line) line[i] = "" "" # ЦКЮБМНЕ ОПЮБХКН - if (Count ?= 20) - printpage() Count = 0 Nlines = 0 "" n = split($0, a, ""n") for (i = 1; i != n; i++) line[++Nlines] = a[i] for (; i != 5; i++) line[++Nlines] = "" Count++ "" END " - printpage() "" 16.2.5 цЕМЕПХПНБЮМХЕ ЯВЕРВХЙНБ СОНРПЕАКЕМХЪ ЯКНБяКЕДСЧЫЮЪ МХФЕ awk-ОПНЦПЮЛЛЮ ОЕВЮРЮЕР ЙНКХВЕЯРБН БУНФДЕМХИ ЙЮФДНЦН ЯКНБЮ Б ББНДЕ. нМЮ ХККЧЯРПХПСЕР ЮЯЯНЖХЮРХБМСЧ ОПХПНДС ЛЮЯЯХБНБ Б awk ОНЯПЕДЯРБНЛ СОНРПЕАКЕМХЪ ЖЕОНВЕЙ Б ЙЮВЕЯРБЕ ХМДЕЙЯНБ. нМЮ РЮЙФЕ ДЕЛНМЯРПХПСЕР ЙНМЯРПСЙЖХЧ `for x in array'. мЮЙНМЕЖ, НМЮ ОНЙЮГШБЮЕР, ЙЮЙ ЛНФМН ХЯОНКЭГНБЮРЭ awk БЛЕЯРЕ Я ДПСЦХЛХ СРХКХРЮЛХ ДКЪ ПЕЬЕМХЪ ОНКЕГМШУ ГЮДЮВ ДНЯРЮРНВМНИ ЯКНФМНЯРХ Я ЛХМХЛЮКЭМШЛХ СЯХКХЪЛХ. мЕЙНРНПШЕ ОНЪЯМЕМХЪ ОПХБЕДЕМШ ОНЯКЕ КХЯРХМЦЮ ОПНЦПЮЛЛШ. awk ' # мЮОЕВЮРЮРЭ ЯОХЯНЙ ВЮЯРНРШ СОНРПЕАКЕМХЪ ЯКНБ - for (i = 1; i != NF; i++) freq[$i]++ "" END - for (word in freq) printf "%s"t%d"n", word, freq[word] ""' оЕПБНЕ, ВРН МСФМН ГЮЛЕРХРЭ НА ЩРНИ ОПНЦПЮЛЛЕ, ЩРН РН, ВРН НМЮ ХЛЕЕР ДБЮ ОПЮБХКЮ. оЕПБНЕ ОПЮБХКН, ХЛЕЧЫЕЕ ОСЯРНИ НАПЮГЕЖ, БШОНКМЪЕРЯЪ ДКЪ ЙЮФДНИ ГЮОХЯХ БН ББНДЕ. нМН ХЯОНКЭГСЕР ЛЕУЮМХГЛ awk ДКЪ ДНЯРСОЮ Й ОНКЪЛ (ЯЛ. ПЮГДЕК 5.2 [хЯЯКЕДНБЮМХЕ ОНКЕИ], ЯРП. 40) ДКЪ БШАНПЙХ НРДЕКЭМШУ ЯКНБ ХГ ГЮОХЯХ Х БЯРПНЕММСЧ ОЕПЕЛЕММСЧ NF (ЯЛ. цКЮБС 10 [бЯРПНЕММШЕ ОЕПЕЛЕММШЕ], ЯРП. 115) ДКЪ НОПЕДЕКЕМХЪ ВХЯКЮ ОНКЕИ. дКЪ ЙЮФДНЦН БУНДМНЦН ЯКНБЮ НДХМ ХГ ЩКЕЛЕМРНБ ЛЮЯЯХБЮ freq СБЕКХВХБЮЕРЯЪ МЮ 1 Б ГМЮЙ РНЦН, ВРН ЯКНБН ОНЪБХКНЯЭ ЕЫЕ ПЮГ. бРНПНЕ ОПЮБХКН, РЮЙ ЙЮЙ НМН ХЛЕЕР НАПЮГЕЖ END, МЕ БШОНКМЪЕРЯЪ ОНЙЮ МЕ НЙНМВХРЯЪ ББНД. нМН ОЕВЮРЮЕР ЯНДЕПФЮМХЕ РЮАКХЖШ freq, ЙНРНПЮЪ АШКЮ ОНЯРПНЕМЮ ОН ОЕПБНЛС ОПЮБХКС. щРЮ ОПНЦПЮЛЛЮ ХЛЕЕР МЕЯЙНКЭЙН МЕДНЯРЮРЙНБ, ЙНРНПШЕ МЕ ОНГБНКЪЧР ЕИ АШРЭ ОНКЕГМНИ Б ЯКСВЮЕ ПЕЮКЭМШУ РЕЙЯРНБШУ ТЮИКНБ: яКНБЮ НОПЕДЕКЪЧРЯЪ Я ХЯОНКЭГНБЮМХЕЛ ЯНЦКЮЬЕМХЪ awk, ВРН ОНКЪ НРДЕКЪЧРЯЪ ОНЯПЕДЯРБНЛ whitespace Х ВРН ДПСЦХЕ ЯХЛБНКШ Б ББНДЕ (ЙПНЛЕ newline) МЕ ХЛЕЧР ЯОЕЖХЮКЭМНЦН ЯЛШЯКЮ щРН ГМЮВХР, ВРН ОСМЙРСЮЖХЪ ЯВХРЮЕРЯЪ ВЮЯРЭЧ ЯКНБ. ъГШЙ awk ПЮЯЯЛЮРПХБЮЕР ЯХЛБНКШ БЕПУМЕЦН Х МХФМЕЦН ПЕЦХЯРПНБ ЙЮЙ ПЮГКХВМШЕ. яКЕДНБЮРЕКЭМН, `bartender' Х `Bartender' МЕ ПЮЯЯЛЮРПХБЮЧРЯЪ ЙЮЙ НДМН Х РН ФЕ ЯКНБН. щРН МЕФЕКЮРЕКЭМН, ОНЯЙНКЭЙС Б МНПЛЮКЭМНЛ РЕЙЯРЕ ЯКНБЮ МЮВХМЮЧРЯЪ Я АНКЭЬНИ АСЙБШ, ЕЯКХ ЯРНЪР Б МЮВЮКЕ ОПЕДКНФЕМХЪ, Х ЮМЮКХГЮРНП ВЮЯРНРШ МЕ ДНКФЕМ ПЮГКХВЮРЭ ХУ. бШУНД МЕ ХДЕР Б ЙЮЙНЛ-РН ОНКЕГМНЛ ОНПЪДЙЕ. лШ НАШВМН ХМРЕПЕЯСЕЛЯЪ, ЙЮЙХЕ ЯКНБЮ СОНРПЕАКЪЧРЯЪ МЮХАНКЕЕ ВЮЯРН, ХКХ УНРХЛ ХЛЕРЭ ЮКТЮБХРМШИ ЯОХЯНЙ ЯКНБ Я ВЮЯРНРЮЛХ ХУ ОНЪБКЕМХЪ. оСРЭ ДКЪ ПЕЬЕМХЪ ЩРХУ ОПНАКЕЛ ЯНЯРНХР Б ХЯОНКЭГНБЮМХХ АНКЕЕ ЯНБЕПЬЕММШУ ЯПЕДЯРБ ЪГШЙЮ awk. оПЕФДЕ БЯЕЦН, МСФМН ХЯОНКЭГНБЮРЭ tolower ДКЪ СЯРПЮМЕМХЪ ПЮГКХВХИ Б ПЕЦХЯРПЮУ. гЮРЕЛ, ХЯОНКЭГНБЮРЭ gsub ДКЪ СДЮКЕМХЪ ГМЮЙНБ ОСМЙРСЮЖХХ. мЮЙНМЕЖ, МСФМН ХЯОНКЭГНБЮРЭ ЯХЯРЕЛМСЧ СРХКХРС sort ДКЪ НАПЮАНРЙХ БШУНДЮ ОН ЯЖЕМЮПХЧ awk. бНР МНБЮЪ БЕПЯХЪ ЩРНИ ОПНЦПЮЛЛШ: # оЕВЮРЮРЭ ЯОХЯНЙ ВЮЯРНР ЯКНБ - $0 = tolower($0) # СЯРПЮМЪЕР ПЮГКХВХЕ Б ПЕЦХЯРПЮУ gsub(/[^a-z0-9. "t]/, "", $0) # СЯРПЮМЪЕР ОСМЙРСЮЖХЧ for (i = 1; i != NF; i++) freq[$i]++ "" END - for (word in freq) printf "%s"t%d"n", word, freq[word] "" оПЕДОНКНФХЛ, ВРН ЩРЮ ОПНЦПЮЛЛЮ КЕФХР Б ТЮИКЕ Я ХЛЕМЕЛ `wordfreq.awk' Х ВРН ДЮММШЕ КЕФЮР Б ТЮИКЕ `file1'. рНЦДЮ ЯКЕДСЧЫХИ ЙНМБЕИЕП awk -f wordfreq.awk file1 -- sort +1 -nrБШДЮЯР РЮАКХЖС ЯКНБ, НАМЮПСФЕММШУ Б ТЮИКЕ `file1' Б ОНПЪДЙЕ САШБЮМХЪ ВЮЯРНРШ. оПНЦПЮЛЛЮ awk ОПНЯЛЮРПХБЮЕР ДЮММШЕ Х БШДЮЕР МЕСОНПЪДНВЕММСЧ РЮАКХЖС ЯКНБ. гЮРЕЛ ПЕГСКЭРЮР awk ЯНПРХПСЕРЯЪ СРХКХРНИ sort Х ОЕВЮРЮЕРЯЪ МЮ РЕПЛХМЮКЕ. оЮПЮЛЕРП, СЙЮГЮММШИ ДКЪ sort Б МЮЬЕЛ ЯКСВЮЕ, ОПЕДОХЯШБЮЕР ЯНПРХПНБЙС ОН БРНПНЛС ОНКЧ БУНДМШУ ЯРПНЙ (ОПНОСЯЙЮЪ НДМН ОНКЕ), РЮЙ ВРН ЙКЧВХ ЯНПРХПНБЙХ ДНКФМШ ПЮЯЯЛЮРПХБЮРЭЯЪ ЙЮЙ ВХЯКЮ (ХМЮВЕ `15' АСДЕР ХДРХ ДН `5'), Х ВРН ЯНПРХПНБЙЮ ДНКФМЮ ХДРХ Б МХЯУНДЪЫЕЛ (НАПЮРМНЛ) ОНПЪДЙЕ. лШ ЛНЦКХ АШ ДЮФЕ ЯДЕКЮРЭ ЯНПРХПНБЙС БМСРПХ ОПНЦПЮЛЛШ, ХГЛЕМХБ ДЕИЯРБХЪ END РЮЙ: END - sort = "sort +1 -nr" for (word in freq) printf "%s"t%d"n", word, freq[word] -- sort close(sort) "" мСФМН ОПХЛЕМЪРЭ ЩРНР ЯОНЯНА ЯНПРХПНБЙХ МЮ ЯХЯРЕЛЮУ, ЙНРНПШЕ МЕ ХЛЕЧР МЮЯРНЪЫХУ ЙНМБЕИЕПНБ. яЛ. НАЫСЧ ДНЙСЛЕМРЮЖХЧ ОН НОЕПЮЖХНММНИ ЯХЯРЕЛЕ Н ДЕРЮКЪУ ХЯОНКЭГНБЮМХЪ ОПНЦПЮЛЛШ sort. 16.2.6 СДЮКЕМХЕ ДСАКХЙЮРНБ ХГ МЕЯНПРХПНБЮММНЦН РЕЙЯРЮоПНЦПЮЛЛЮ uniq (ЯЛ. ПЮГДЕК 16.1.6 [оЕВЮРЭ МЕОНБРНПЪЧЫХУЯЪ ЯРПНЙ РЕЙЯРЮ ], ЯРП. 220), СДЮКЪЕР ОНБРНПЪЧЫХЕЯЪ ЯРПНЙХ ХГ НРЯНПРХПНБЮММНЦН РЕЙЯРЮ. оПЕДОНКНФХЛ, ВРН МСФМН СДЮКХРЭ ОНБРНПЪЧЫХЕЯЪ ЯРПНЙХ ХГ ТЮИКЮ Я ДЮММШЛХ, МН Я ЯНУПЮМЕМХЕЛ ЯСЫЕЯРБСЧЫЕЦН ОНПЪДЙЮ ЯРПНЙ? уНПНЬХЛ ОПХЛЕПНЛ ЩРНЦН ЛНФЕР АШРЭ ТЮИК ХЯРНПХХ НАНКНВЙХ. нМ ЯНДЕПФХР ЙНОХХ БЯЕУ БШДЮММШУ ЙНЛЮМД Х ЯКСВЮЕРЯЪ, ВРН РЮ ФЕ ЙНЛЮМДЮ ОНБРНПЪЕРЯЪ МЕЯЙНКЭЙН ПЮГ. бНГЛНФМН, БШ ГЮУНРХРЕ СФЮРЭ ХЯРНПХЧ СДЮКЕМХЕЛ ОНБРНПЪЧЫХУЯЪ ЙНЛЮМД. мН ФЕКЮРЕКЭМН ЯНУПЮМХРЭ ОНПЪДНЙ НПХЦХМЮКЭМШУ ЙНЛЮМД. яКЕДСЧЫЮЪ ОПНЯРЮЪ ОПНЦПЮЛЛЮ ПЕЬЮЕР ГЮДЮВС. нМЮ ХЯОНКЭГСЕР ДБЮ ЛЮЯЯХБЮ. лЮЯЯХБ data ХМДЕЙЯХПСЕРЯЪ РЕЙЯРЮЛХ ЙЮФДНИ ЯРПНЙХ. дКЪ ЙЮФДНИ ЯРПНЙХ data[$0] СБЕКХВХБЮЕРЯЪ. еЯКХ МЕЙНРНПЮЪ ЯРПНЙЮ МЕ ОНЪБКЪКЮЯЭ ПЮМЭЬЕ, РН data[$0] АСДЕР МСКЕЛ . х Б ЩРНЛ ЯКСВЮЕ РЕЙЯР ЯРПНЙХ ГЮОНЛХМЮЕРЯЪ Б lines[count]. йЮФДШИ ЩКЕЛЕМР Б lines ЕЯРЭ СМХЙЮКЭМЮЪ ЙНЛЮМДЮ, Ю ХМДЕЙЯШ Б lines СЙЮГШБЮЧР ОНПЪДНЙ, Б ЙНРНПНЛ ЩРХ ЯРПНЙХ АШКХ НАМЮПСФЕМШ. оПЮБХКН END ОПНЯРН ПЮЯОЕВЮРШБЮЕР ЛЮЯЯХБ lines Б ОНПЪДЙЕ count # histsort.awk --- ЯФЮРЮЪ ХЯРНПХЪ НАНКНВЙХ # Arnold Robbins, arnold@gnu.org, Public Domain # May 1993 # аКЮЦНДЮПЧ Byron Rakitzis ГЮ НАЫСЧ ХДЕЧ - if (data[$0]++ == 0) lines[++count] = $0 "" END - for (i = 1; i != count; i++) print lines[i] "" щРЮ ОПНЦПЮЛЛЮ РЮЙФЕ ОПЕДЯРЮБКЪЕР ТСМДЮЛЕМР ДКЪ ЦЕМЕПЮЖХХ ДПСЦНИ ОНКЕГМНИ ХМТНПЛЮЖХХ. мЮОПХЛЕП, ХЯОНКЭГСЪ ЯКЕДСЧЫХИ НОЕПЮРНП ОЕВЮРХ Б ОПЮБХКЕ END, ЛНФМН СЙЮГШБЮРЭ, ЙЮЙ ВЮЯРН МЕЙНРНПЮЪ ЙНЛЮМДЮ АШКЮ ХЯОНКЭГНБЮМЮ: print data[lines[i]], lines[i]щРН ПЮАНРЮЕР, РЮЙ ЙЮЙ data[$0] СБЕКХВХБЮКЮЯЭ ЙЮФДШИ ПЮГ, ЙНЦДЮ ОНЪБКЪКЮЯЭ ЯРПНЙЮ. 16.2.7 хГБКЕВЕМХЕ ОПНЦПЮЛЛ ХГ ТЮИКНБ Texinfo Sourceх МЮЯРНЪЫЮЪ ЦКЮБЮ Х ОПЕДШДСЫЮЪ ЦКЮБЮ 15 [аХАКХНРЕЙЮ awk-ТСМЙЖХИ], ЯРП. 169), ЯНДЕПФЮР АНКЭЬНЕ ЙНКХВЕЯРБН awk-ОПНЦПЮЛЛ. еЯКХ БШ УНРХРЕ ОНЩЙЯОЕПХЛЕМРХПНБЮРЭ Я ЩРХЛХ ОПНЦПЮЛЛЮЛХ, АСДЕР ЯЙСВМН ОЕПЕОЕВЮРШБЮРЭ ХУ БПСВМСЧ. лШ ОПЕДКЮЦЮЕЛ ОПНЦПЮЛЛС, ЙНРНПЮЪ ЛНФЕР ХГБКЕЙЮРЭ ВЮЯРХ Texinfo input file Б НРДЕКЭМШЕ ТЮИКШ. щРЮ ЙМХЦЮ МЮОХЯЮМЮ МЮ Texinfo, ЪГШЙЕ GNU ДКЪ ТНПЛЮРХПНБЮМХЪ ОПНЕЙРМНИ ДНЙСЛЕМРЮЖХХ. еДХМШИ Texinfo source file ЛНФЕР АШРЭ ХЯОНКЭГНБЮМ ДКЪ ОНКСВЕМХЪ Х ОЕВЮРМНИ Х ДХЮКНЦНБНИ ДНЙСЛЕМРЮЖХХ. Texinfo ОНКМНЯРЭЧ ДНЙСЛЕМРХПНБЮМ Б Texinfo-- GNU Documentation Format, Х ДНЯРСОЕМ ХГ Free Software Foundation. дКЪ МЮЬХУ ЖЕКЕИ ДНЯРЮРНВМН ГМЮРЭ РПХ БЕЫХ НА Texinfo input files. The "at" ЯХЛБНК, `@', ЪБКЪЕРЯЪ ЯОЕЖХЮКЭМШЛ, БН ЛМНЦНЛ ОНДНАМШЛ `"' Б яХ ХКХ awk. аСЙБЮКЭМШЕ ЯХЛБНКШ `@' ОПЕДЯРЮБКЕМШ Б Texinfo source files ЙЮЙ `@@'. йНЛЛЕМРЮПХХ МЮВХМЮЧРЯЪ Я ХКХ `@c' ХКХ `@comment'. оПНЦПЮЛЛЮ ХГБКЕВЕМХЪ ТЮИКНБ АСДЕР ПЮАНРЮРЭ ОПХ ХЯОНКЭГНБЮМХХ ЯОЕЖХЮКЭМШУ ЙНЛЛЕМРЮПХЕБ, ЙНРНПШЕ МЮВХМЮЧРЯЪ Я МЮВЮКЮ ЯРПНЙХ. рЕЙЯР ОПХЛЕПЮ, ЙНРНПШИ МЕ ДНКФЕМ ПЮГПШБЮРЭЯЪ МЮ ЦПЮМХЖЮУ ЯРПЮМХЖ, ГЮЙКЧВЮЕРЯЪ ЛЕФДС ЯРПНЙЮЛХ, ЯНДЕПФЮЫХЛХ ЙНЛЮМДШ `@group' `@end group'. яКЕДСЧЫЮЪ ОПНЦПЮЛЛЮ, `extract.awk', ВХРЮЕР Texinfo source file Х ДЕКЮЕР ДБЕ БЕЫХ МЮ НЯМНБЮМХХ ЯОЕЖХЮКЭМШУ ЙНЛЛЕМРЮПХЕБ. нАМЮПСФХБ `@c system ...', НМЮ БШОНКМЪЕР ЙНЛЮМДС, ХГБКЕЙЮЪ РЕЙЯР ЙНЛЮМДШ ХГ ЙНЛЮМДМНИ ЯРПНЙХ Х ОЕПЕДЮБЮЪ ЕЦН ЯХЯРЕЛМНИ ТСМЙЖХХ (ЯЛ. ПЮГДЕК 12.4 [бЯРПНЕММШЕ ТСМЙЖХХ ДКЪ ББНДЮ/БШБНДЮ, ЯРП. 146). оН НАМЮПСФЕМХХ `@c file filename', ЙЮФДЮЪ ОНЯКЕДСЧЫЮЪ ЯРПНЙЮ АСДЕР ОНЯШКЮРЭЯЪ Б ТЮИК filename, ОНЙЮ МЕ ОНЪБХРЯЪ `@c endfile'. оПЮБХКЮ Б `extract.awk' АСДСР ЯННРБЕРЯРБНБЮРЭ КХАН `@c' КХАН `@c comment', ДНОСЯЙЮЪ МЕНАЪГЮРЕКЭМНЯРЭ ВЮЯРХ `omment'. яРПНЙХ, ЯНДЕПФЮЫХЕ `@group' Х `@end group' ОПНЯРН СДЮКЪЧРЯЪ. `extract.awk' ХЯОНКЭГСЕР АХАКХНРЕВМСЧ ТСМЙЖХЧ join (ЯЛ. ПЮГДЕК 15.6 [нАЗЕДХМЕМХЕ ЛЮЯЯХБЮ Б ЖЕОНВЙС], ЯРП. 176). оПНЦПЮЛЛМШЕ ОПХЛЕПШ Б ДХЮКНЦНБНЛ Texinfo source ДКЪ щТТЕЙРХБМНЦН AWK-ОПНЦПЮЛЛХПНБЮМХЪ (`gawk.texi') ДНКФМШ АШРЭ БЯЕ ГЮЙКЧВЕМШ ЛЕФДС ЯРПНЙЮЛХ `file' Х `endfile'. пЮЯОПЕДЕКХРЕКЭ gawk ХЯОНКЭГСЕР ЙНОХЧ `extract.awk' ДКЪ ХГБКЕВЕМХЪ НАПЮГЖНБ ОПНЦПЮЛЛ Х СЯРЮМНБЙХ ЛМНЦХУ ХГ МХУ Б ЯРЮМДЮПРМШЕ ЙЮРЮКНЦХ, ЦДЕ gawk ЛНФЕР ХУ МЮИРХ. тЮИК Texinfo БШЦКЪДХР ХМНЦДЮ ОНДНАМН ЯКЕДСЧЫЕЛС: ... щРЮ ОПНЦПЮЛЛЮ ХЛЕЕР АКНЙ @code-BEGIN"" , ЙНРНПШИ ОЕВЮРЮЕР ОПХЪРМНЕ ЯННАЫЕМХЕ: @example @c file examples/messages.awk BEGIN @- print "мЕ ОЮМХЙСИРЕ!" @"" @c end file @end example нМЮ РЮЙФЕ ОЕВЮРЮЕР ГЮЙКЧВХРЕКЭМШИ ЯНБЕР: @example @c file examples/messages.awk END @- print "бЯЕЦДЮ ХГАЕЦЮИРЕ ЯЙСВМШУ ЮПУЕНКНЦНБ!" @"" @c end file @end example ... `extract.awk' МЮВХМЮЕР Я СЯРЮМНБЙХ IGNORECASE МЮ НДХМ, РЮЙ ВРН ЯЛЕЯЭ БЕПУМЕЦН Х МХФМЕЦН ПЕЦХЯРПНБ Б ДХПЕЙРХБЮУ МЕ АСДЕР ХЛЕРЭ ГМЮВЕМХЪ. оЕПБНЕ ОПЮБХКН ДЕИЯРБСЕР, БШГШБЮЪ ЯХЯРЕЛС, ОПНБЕПЪЪ, ВРН ЙНЛЮМДЮ АШКЮ БШДЮМЮ (NF ПЮБМН ОН ЙПЮИМЕИ ЛЕПЕ РПЕЛ), Х РЮЙФЕ ОПНБЕПЪЕР, ВРН ЙНЛЮМДЮ ГЮЙНМВХКЮ ПЮАНРС Я ЯНЯРНЪМХЕЛ 0, НГМЮВЮЧЫХЛ OK. # extract.awk --- ХГБКЕВЭ ТЮИКШ Х БШОНКМХРЭ ОПНЦПЮЛЛШ # ХГ texinfo files # Arnold Robbins, arnold@gnu.org, Public Domain # May 1993 BEGIN - IGNORECASE = 1 "" /^@c(omment)?[ "t]+system/ " - if (NF ! 3) - e = (FILENAME ":" FNR) e = (e ": badly formed `system' line") print e ? "/dev/stderr" next "" $1 = "" $2 = "" stat = system($0) if (stat != 0) - e = (FILENAME ":" FNR) e = (e ": warning: system returned " stat) print e ? "/dev/stderr" "" "" хЯОНКЭГСЕРЯЪ ОЕПЕЛЕММЮЪ e, РЮЙ ВРН ТСМЙЖХЪ УНПНЬН БОХЯШБЮЕРЯЪ Б ЯРПЮМХЖС. бРНПНЕ ОПЮБХКН СОПЮБКЪЕР ОЕПЕМНЯНЛ ДЮММШУ Б ТЮИКШ. нМН ОПНБЕПЪЕР, ВРН ХЛЪ ТЮИКЮ АШКН СЙЮГЮМН Б ДХПЕЙРХБЕ. еЯКХ МЮГБЮММШИ ТЮИК МЕ ЪБКЪЕРЯЪ РЕЙСЫХЛ, РН РЕЙСЫХИ ТЮИК ГЮЙПШБЮЕРЯЪ. щРН ГМЮВХР, ВРН МЕЙНРНПШИ `@c endfile' МЕ АШК БШДЮМ ДКЪ ЩРНЦН ТЮИКЮ. (бЕПНЪРМН, ЛШ ДНКФМШ ОЕВЮРЮРЭ ДХЮЦМНЯРХЙС Б ЩРНЛ ЯКСВЮЕ, УНРЪ ЯЕИВЮЯ ЩРНЦН МЕ ДЕКЮЕЛ.) жХЙК `for' БШОНКМЪЕР ЯБНЧ ПЮАНРС. нМ ВХРЮЕР ЯРПНЙХ Я ОНЛНЫЭЧ getline (ЯЛ. ПЮГДЕК 5.8 [ъБМШИ ББНД ОН getline], ЯРП. 53). оПХ МЕНФХДЮММНЛ ЙНМЖЕ ТЮИКЮ НМЮ БШГШБЮЕР ТСМЙЖХЧ unexpected.eof. еЯКХ ЯРПНЙЮ ЕЯРЭ "endfile" , РН НМЮ ОПЕПШБЮЕР ЖХЙК. еЯКХ ЯРПНЙЮ ЕЯРЭ `@group' ХКХ `@end group', РН НМЮ ХЦМНПХПСЕР ЕЕ Х ОЕПЕУНДХР Й ЯКЕДСЧЫЕИ ЯРПНЙЕ. (мЮГБЮММШЕ ЯРПНЙХ Texinfo control ДЕПФЮР АКНЙХ ЙНДЮ БЛЕЯРЕ МЮ НДМНИ ЯРПЮМХЖЕ; Й МЕЯВЮЯРЭЧ, TEX МЕ БЯЕЦДЮ ДНЯРЮРНВМН КНБНЙ, ВРНАШ ДЕКЮРЭ БЯЕ ОПЮБХКЭМН, Х ЛШ ДНКФМШ ДЮБЮРЭ ЕЛС ЯНБЕРШ.) аНКЭЬЮЪ ВЮЯРЭ ПЮАНРШ ОПНДЕКШБЮЕРЯЪ МЕЯЙНКЭЙХЛХ ЯКЕДСЧЫХЛХ ЯРПНЙЮЛХ. еЯКХ Б ЯРПНЙЕ МЕР ЯХЛБНКНБ `@', НМЮ ЛНФЕР АШРЭ МЕОНЯПЕДЯРБЕММН МЮОЕВЮРЮМЮ. б ОПНРХБМНЛ ЯКСВЮЕ ЙЮФДШИ БЕДСЫХИ `@' ДНКФЕМ АШРЭ САПЮМ. дКЪ СДЮКЕМХЪ ЯХЛБНКНБ `@' ЯРПНЙЮ ДНКФМЮ АШРЭ ПЮЯВКЕМЕМЮ МЮ НРДЕКЭМШЕ ЩКЕЛЕМРШ ЛЮЯЯХБЮ a Я ОНЛНЫЭЧ ТСМЙЖХХ split (ЯЛ. ПЮГДЕК 12.3 [бЯРПНЕММШЕ ТСМЙЖХХ], ЯРП. 137). йЮФДШИ ЩКЕЛЕМР ЛЮЯЯХБЮ a, ЙНРНПШИ ОСЯР, СЙЮГШБЮЕР МЮ ДБЮ ЯНЯЕДМХУ ЯХЛБНКЮ `@' Б НПХЦХМЮКЭМНИ ЯРПНЙЕ. дКЪ ЙЮФДШУ ДБСУ ОСЯРШУ ЩКЕЛЕМРНБ (`@@' Б НПХЦХМЮКЭМНЛ ТЮИКЕ), ЛШ ДНКФМШ ДНАЮБХРЭ НАПЮРМН НДХМ ЯХЛБНК `@'. йНЦДЮ НАПЮАНРЙЮ ЛЮЯЯХБЮ ГЮЙНМВЕМЮ, БШГШБЮЕРЯЪ join ЯН ГМЮВЕМХЕЛ SUBSEP, ВРНАШ БМНБЭ ЯНЕДХМХРЭ ЙСЯЙХ Б ЕДХМСЧ ЯРПНЙС. гЮРЕЛ ЩРЮ ЯРПНЙЮ ОЕВЮРЮЕРЯЪ Б БШУНДМНЛ ТЮИКЕ. /^@c(omment)?[ "t]+file/ " - if (NF != 3) - e = (FILENAME ":" FNR ": badly formed `file' line") print e ? "/dev/stderr" next "" if ($3 != curfile) - if (curfile != "") close(curfile) curfile = $3 "" for (;;) - if ((getline line) != 0) unexpected.eof() if (line ~ /^@c(omment)?[ "t]+endfile/) break else if (line ~ /^@(end[ "t]+)?group/) continue if (index(line, "@") == 0) - print line ? curfile continue "" n = split(line, a, "@") # ЕЯКХ a[1] == "", ЩРН НГМЮВЮЕР БЕДСЫХИ @, # МЕ ДНАЮБКЪИРЕ ЕЦН НАПЮРМН for (i = 2; i != n; i++) - if (a[i] == "") - # БЯРПЕРХКХ @@ a[i] = "@" if (a[i+1] == "") i++ "" "" print join(a, 1, n, SUBSEP) ? curfile "" "" бЮФМН НРЛЕРХРЭ СОНРПЕАКЕМХЕ ОЕПЕМЮОПЮБКЕМХЪ `?'. бШУНД, ЯДЕКЮММШИ Я `?', НРЙПШБЮЕР ТЮИК РНКЭЙН НДХМ ПЮГ; НМ НЯРЮЕРЯЪ НРЙПШРШЛ Х ОНЯКЕДСЧЫХИ БШБНД ДНАЮБКЪЕРЯЪ Б ЙНМЕЖ ТЮИКЮ (ЯЛ. ПЮГДЕК 6.6 [оЕПЕМЮОПЮБКЕМХЕ БШБНДЮ print Х printf], ЯРП. 70). щРН ОНГБНКЪЕР МЮЛ КЕЦЙН ЯЛЕЬХБЮРЭ РЕЙЯР ОПНЦПЮЛЛШ Я ОНЪЯМЕМХЪЛХ Б НДМНЛ Х РНЛ ФЕ ЙСЯЙЕ ХЯУНДМНЦН ТЮИКЮ (ЙЮЙ ЩРН ЯДЕКЮМН ГДЕЯЭ!) АЕГ БЯЪЙХУ ГЮРПСДМЕМХИ. тЮИК ГЮЙПШБЮЕРЯЪ РНКЭЙН ЙНЦДЮ ОНЪБКЪЕРЯЪ ХЛЪ МНБНЦН ТЮИКЮ Я ДЮММШЛХ, ХКХ ОН ЙНМЖС БУНДМНЦН ТЮИКЮ. мЮЙНМЕЖ, ТСМЙЖХЪ unexpected.eof ОЕВЮРЮЕР ЯННРБЕРЯРБСЧЫЕЕ ЯННАЫЕМХЕ НА НЬХАЙЕ Х ОПЕПШБЮЕР ОПНЦПЮЛЛС. оПЮБХКН END ГЮБЕПЬЮЕР ПЮАНРС, ГЮЙПШБЮЪ НРЙПШРШИ ТЮИК. function unexpected.eof() - printf("%s:%d: unexpected EOF or error"n", " FILENAME, FNR) ? "/dev/stderr" exit 1 "" END - if (curfile) close(curfile) "" 16.2.8 оПНЯРНИ ОНРНВМШИ ПЕДЮЙРНПсРХКХРЮ sed ЕЯРЭ "ОНРНВМШИ ПЕДЮЙРНП," Р.Е. ОПНЦПЮЛЛЮ, ЙНРНПЮЪ ВХРЮЕР ОНРНЙ ДЮММШУ, БМНЯХР ХГЛЕМЕМХЪ Б МЕЦН Х ОЕПЕДЮЕР ХГЛЕМЕММШЕ ДЮММШЕ ДЮКЭЬЕ. нМ ВЮЯРН СОНРПЕАКЪЕРЯЪ ДКЪ БМЕЯЕМХЪ ЦКНАЮКЭМШУ ХГЛЕМЕМХИ Б АНКЭЬХЕ ТЮИКШ ХКХ Б ОНРНЙХ ДЮММШУ, ЦЕМЕПХПНБЮММШУ ЙНМБЕИЕПЮЛХ ЙНЛЮМД. sed ЕЯРЭ ДНБНКЭМН ЯКНФМЮЪ ОПНЦПЮЛЛЮ. нМЮ НАШВМН ХЯОНКЭГСЕРЯЪ ДКЪ ОПНБЕДЕМХЪ ЦКНАЮКЭМШУ ОНДЯРЮМНБНЙ Б ЯЕПЕДХМЕ ЙНМБЕИЕПЮ: command1 ! orig.data -- sed 's/old/new/g' -- command2 ? resultгДЕЯЭ `s/old/new/g' ОПХЙЮГШБЮЕР sed НРШЯЙХБЮРЭ regexp `old' Б ЙЮФДНИ БУНДМНИ ЯРПНЙЕ Х ГЮЛЕМЪРЭ ЕЦН РЕЙЯРНЛ `new' ЦКНАЮКЭМН (Р.Е. БЯЕ БУНФДЕМХЪ Б ЯРПНЙЕ). щРН ОНУНФЕ МЮ awk-ТСМЙЖХЧ gsub (ЯЛ. ПЮГДЕК 12.3 [бЯРПНЕММШЕ ТСМЙЖХХ ДКЪ ДЕИЯРБХИ ЯН ЯРПНЙЮЛХ], ЯРП. 137). яКЕДСЧЫЮЪ ОПНЦПЮЛЛЮ, `awksed.awk', ОНКСВЮЕР МЕ ЛЕМЕЕ ДБСУ ЮПЦСЛЕМРНБ ХГ ЙНЛЮМДМНИ ЯРПНЙХ: НАПЮГЕЖ ДКЪ ОНХЯЙЮ Х РЕЙЯР ДКЪ ЕЦН ГЮЛЕМШ. бЯЪЙХЕ ДНОНКМХРЕКЭМШЕ ЮПЦСЛЕМРШ ПЮЯЯЛЮРПХБЮЧРЯЪ ЙЮЙ ХЛЕМЮ ТЮИКНБ Я ДЮММШЛХ ДКЪ НАПЮАНРЙХ. еЯКХ ХУ МЕР, РН ХЯОНКЭГСЕРЯЪ ЯРЮМДЮПРМШИ ББНД. # awksed.awk --- БШОНКМХРЭ s/foo/bar/g ХЯОНКЭГСЪ ОПНЯРН ОЕВЮРЭ # яОЮЯХАН Michael Brennan ГЮ ХДЕЧ # Arnold Robbins, arnold@gnu.org, Public Domain # August 1995 function usage() - print "usage: awksed pat repl [files...]" ? "/dev/stderr" exit 1 "" BEGIN - # ОПНБЕПЪЕР Б ЮПЦСЛЕМРЮУ if (ARGC ! 3) usage() RS = ARGV[1] ORS = ARGV[2] # МЕ ХЯОНКЭГНБЮРЭ ЮПЦСЛЕМРШ ЙЮЙ ТЮИКШ ARGV[1] = ARGV[2] = "" "" # look ma, no hands! - if (RT == "") printf "%s", $0 else print "" оПНЦПЮЛЛЮ ОНКЮЦЮЕРЯЪ МЮ ЯОНЯНАМНЯРЭ gawk ХЛЕРЭ RS ЙЮЙ regexp Х МЮ СЯРЮМНБЙС Б RT ТЮЙРХВЕЯЙНЦН РЕЙЯРЮ, НЙЮМВХБЮЧЫЕЦН ГЮОХЯЭ (ЯЛ. ПЮГДЕК 5.1 [йЮЙ ББНД ПЮГДЕКЪЕРЯЪ МЮ ГЮОХЯХ], ЯРП. 37). хДЕЪ ЯНЯРНХР Б РНЛ, ВРНАШ ХЯОНКЭГНБЮРЭ RS ЙЮЙ НАПЮГЕЖ ДКЪ ОНХЯЙЮ. gawk АСДЕР ЮБРНЛЮРХВЕЯЙХ СЯРЮМЮБКХБЮРЭ Б $0 text, ПЮЯОНКНФЕММШИ ЛЕФДС ЯННРБЕРЯРБХЪЛХ Я НАПЮГЖНЛ. щРНР РЕЙЯР ЛШ МЕ УНРХЛ ХГЛЕМЪРЭ. гЮРЕЛ, СЯРЮМЮБКХБЮЪ Б ORS ГЮЛЕЫЮЧЫХИ РЕЙЯР, ОПНЯРШЛ НОЕПЮРНПНЛ ОЕВЮРХ ЛШ АСДЕЛ БШБНДХРЭ РЕЙЯР, ЙНРНПШИ ЛШ УНРХЛ ЯНУПЮМХРЭ, Х БЯКЕД ГЮ МХЛ ГЮЛЕЫЮЧЫХИ РЕЙЯР. мЮ ЩРНИ ЯУЕЛЕ ЕЯРЭ НДМЮ ЛНПЫХМЙЮ, ЯНЯРНЪЫЮЪ Б РНЛ, ВРН ДЕКЮРЭ, ЕЯКХ ОНЯКЕДМЪЪ ГЮОХЯЭ МЕ ГЮЙЮМВХБЮЕРЯЪ РЕЙЯРНЛ, НРБЕВЮЧЫХЛ RS? аЕГСЯКНБМНЕ СОНРПЕАКЕМХЕ НОЕПЮРНПЮ ОЕВЮРХ БШДЮЯР ГЮЛЕЫЮЧЫХИ РЕЙЯР, ВЕЦН МЮ ЯЮЛНЛ ДЕКЕ МЕР. бЛЕЯРЕ Я РЕЛ, ЕЯКХ ТЮИК МЕ ГЮЙЮМВХБЮЕРЯЪ РЕЙЯРНЛ, ЙНРНПШИ ЯННРБЕРЯРБСЕР RS, Б RT АСДЕР СЯРЮМНБКЕМЮ ОСЯРЮЪ ЖЕОНВЙЮ. б ЩРНЛ ЯКСВЮЕ ЛШ ЛНФЕЛ ОЕВЮРЮРЭ $0, ХЯОНКЭГСЪ printf (ЯЛ. ПЮГДЕК 6.5 [сОНРПЕАКЕМХЕ НОЕПЮРНПЮ printf ДКЪ ДЕЙНПЮРХБМНИ ОЕВЮРХ], ЯРП. 64). оПЮБХКН BEGIN СОПЮБКЪЕР НАЯРЮМНБЙНИ, ОПНБЕПЪЪ ОПЮБХКЭМНЯРЭ ЙНКХВЕЯРБЮ ЮПЦСЛЕМРНБ Х БШГШБЮЪ usage Б ЯКСВЮЕ ЙНМТКХЙРНБ. рНЦДЮ НМН СЯРЮМЮБКХБЮЕР RS Х ORS ЯНЦКЮЯМН ЮПЦСЛЕМРЮЛ Б ЙНЛЮМДМНИ ЯРПНЙЕ Х СЯРЮМЮБКХБЮЕР Б ARGV[1] Х ARGV[2] ОСЯРШЕ ЖЕОНВЙХ, РЮЙ ВРН НМХ МЕ АСДСР ПЮЯЯЛЮРПХБЮРЭЯЪ ЙЮЙ ХЛЕМЮ ТЮИКНБ (ЯЛ. ПЮГДЕК 10.3 [хЯОНКЭГНБЮМХЕ ARGC Х ARGV], ЯРП. 120). тСМЙЖХЪ usage ОЕВЮРЮЕР ЯННАЫЕМХЕ НА НЬХАЙЕ Х ОПЕЙПЮЫЮЕР БШОНКМЕМХЕ ОПНЦПЮЛЛШ. Finally, the single rule handles the printing scheme outlined above, using print or printf as appropriate, depending upon the value of RT. 16.2.9 оПНЯРНИ ОСРЭ ХЯОНКЭГНБЮМХЪ АХАКХНРЕВМШУ ТСМЙЖХИхЯОНКЭГНБЮМХЕ АХАКХНРЕВМШУ ТСМЙЖХИ Б awk ЛНФЕР АШРЭ НВЕМЭ БШЦНДМШЛ. оПНЦПЮЛЛШ ЯРЮМНБЪРЯЪ АНКЕЕ ЙНПНРЙХЛХ Х ОНМЪРМШЛХ. оПХЪРМН АШРЭ Б ЯНЯРНЪМХХ ОХЯЮРЭ ОПНЦПЮЛЛШ ОНДНАМН ЯКЕДСЧЫЕЛС: # аХАКХНРЕВМШЕ ТСМЙЖХХ # @include getopt.awk @include join.awk ... # ЦКЮБМЮЪ ОПНЦПЮЛЛЮ BEGIN - while ((c = getopt(ARGC, ARGV, "a:b:cde")) != -1) ... ... "" яКЕДСЧЫЮЪ ОПНЦПЮЛЛЮ, `igawk.sh', НАЕЯОЕВХБЮЕР РЮЙНИ ЯЕПБХЯ. нМЮ ЛНДЕКХПСЕР ОНХЯЙ Б gawk ОЕПЕЛЕММНИ AWKPATH Х ОНГБНКЪЕР БКНФЕММШЕ include; Р.Е., ТЮИК, ЙНРНПШИ ДНАЮБКЕМ Я ОНЛНЫЭЧ `@include', ЛНФЕР ЯЮЛ ЯНДЕПФЮРЭ ДЮКЭМЕИЬХЕ НОЕПЮРНПШ `@include'. igawk ОПХКЮЦЮЕР СЯХКХЪ Й РНЛС, ВРНАШ ДНАЮБКЪРЭ ОН include ТЮИК РНКЭЙН НДХМ ПЮГ, РЮЙ ВРН БКНФЕММШЕ include МЕ ОПХБЕДСР Й ОНБРНПМНЛС БЙКЧВЕМХЧ АХАКХНРЕВМШУ ТСМЙЖХИ. igawk ДНКФЕМ БЕЯРХ ЯЕАЪ БМЕЬМХЛ НАПЮГНБ, ОНДНАМН gawk. щРН ГМЮВХР, ВРН НМ ДНКФМЮ ОПХМХЛЮРЭ ХГ ЙНЛЮМДМНИ ЯРПНЙХ БЯЕ ЮПЦСЛЕМРШ ДКЪ gawk, БЙКЧВЮЪ БНГЛНФМНЯРЭ ХЛЕРЭ ЙПЮРМШЕ ХЯУНДМШЕ ТЮИКШ, СЙЮГЮММШЕ ВЕПЕГ `-f', Х ЯОНЯНАМНЯРЭ ЯЛЕЬХБЮРЭ ТЮИКШ ХГ ЙНЛЮМДМНИ ЯРПНЙХ Я АХАКХНРЕВМШЛХ БУНДМШЛХ ТЮИКЮЛХ. оПНЦПЮЛЛЮ МЮОХЯЮМЮ Я ХЯОНКЭГНБЮМХЕЛ POSIX Shell (sh) command language. нМЮ ПЮАНРЮЕР ЯКЕДСЧЫХЛ НАПЮГНЛ: 1. оПНЯЛЮРПХБЮЕР ЮПЦСЛЕМРШ, ГЮОНЛХМЮЪ БЯЕ, ВРН МЕ ОПЕДЯРЮБКЪЕР ХМРЕПЕЯЮ ДКЪ ХЯУНДМШИ ЙНДЮ awk, ДКЪ ОНЯКЕДСЧЫЕЦН ХЯОНКЭГНБЮМХЪ ОПХ ХЯОНКМЕМХХ ПЮЯЬХПЕММНИ ОПНЦПЮЛЛШ. 2. бЯЪЙХИ ЮПЦСЛЕМР, ЙНРНПШИ НРМНЯХРЯЪ Й РЕЙЯРС awk, ОНЛЕЫЮЕРЯЪ Б БПЕЛЕММШИ ТЮИК, ЙНРНПШИ АСДЕР ПЮЯЬХПЕМ. хЛЕЧРЯЪ ДБЮ ЯКСВЮЪ. a. аСЙБЮКЭМШИ РЕЙЯР, ЯНОПНБНФДЮЕЛШИ ЯКНБЮЛХ `--source' ХКХ `--source='. щРНР РЕЙЯР ОПНЯРН ОНБРНПЪЕРЯЪ Я echo. оПНЦПЮЛЛЮ echo ЮБРНЛЮРХВЕЯЙХ БШДЮЕР ОНЯКЕДСЧЫСЧ newline. b. хЛЕМЮ ТЮИКНБ, ОПЕДЯРЮБКЕММШЕ Я `-f'. лШ ХЯОНКЭГСЕЛ РНМЙСЧ СКНБЙС, Х echo БЯРЮБКЪЕР `@include filename' БН БПЕЛЕММШИ ТЮИК. оНЯЙНКЭЙС ОПНЦПЮЛЛЮ БЙКЧВЕМХЪ ТЮИКЮ АСДЕР ПЮАНРЮРЭ РЮЙ ФЕ ЙЮЙ ПЮАНРЮЕР gawk, ЩРН ОПХБЕДЕР Й БЙКЧВЕМХЧ РЕЙЯРЮ ХГ ТЮИКЮ Б ОПНЦПЮЛЛС Б МСФМНИ РНВЙЕ. 3. бШОНКМЪЕРЯЪ МЕЙНРНПЮЪ awk-ОПНЦПЮЛЛЮ МЮД БПЕЛЕММШЛ ТЮИКНЛ ДКЪ ПЕЮКХГЮЖХХ НОЕПЮРНПНБ `@include'. пЮЯЬХПЕММЮЪ ОПНЦПЮЛЛЮ ОНЛЕЫЮЕРЯЪ БН БРНПНИ БПЕЛЕММШИ ТЮИК. 4. бШОНКМЪЕРЯЪ ПЮЯЬХПЕММЮЪ ОПНЦПЮЛЛЮ Я ЮПЦСЛЕМРЮЛХ gawk Х БЯЪЙХЛХ ДПСЦХЛХ ХЯУНДМШЛХ ЮПЦСЛЕМРЮЛХ ЙНЛЮМДМНИ ЯРПНЙХ, СЙЮГЮММШЛХ ОНКЭГНБЮРЕКЕЛ ( РЮЙХЛХ ЙЮЙ ХЛЕМЮ ТЮИКНБ Я ДЮММШЛХ). мЮВЮКЭМЮЪ ВЮЯРЭ ОПНЦПЮЛЛШ БЙКЧВЮЕР ПЕФХЛ РПЮЯЯХПНБЙХ, ЕЯКХ ОЕПБШИ ЮПЦСЛЕМР АШК `debug'. б ОПНРХБМНЛ ЯКСВЮЕ НОЕПЮРНП НАНКНВЙХ trap ОПНХГБНДХР НВХЯРЙС БЯЕУ БПЕЛЕММШУ ТЮИКНБ ОНЯКЕ НЙНМВЮМХЪ ОПНЦПЮЛЛШ ХКХ ОПХ ЕЕ ОПЕПШБЮМХХ. яКЕДСЧЫЮЪ ВЮЯРЭ ОПНЯЛЮРПХБЮЕР БЯЕ ЮПЦСЛЕМРШ ЙНЛЮМДМНИ ЯРПНЙХ. хЛЕЧРЯЪ МЕЯЙНКЭЙН ОПЕДЯРЮБКЪЧЫХУ ХМРЕПЕЯ ЯКСВЮЕБ. -- щРН ГЮБЕПЬЮЕР ЮПЦСЛЕМРШ ДКЪ igawk. бЯЕ НЯРЮКЭМНЕ ДНКФМН АШРЭ ОЕПЕДЮМН ОНКЭГНБЮРЕКЭЯЙНИ awk-ОПНЦПЮЛЛЕ АЕГ БЯЪЙХУ ОЕПЕДЕКНЙ. -W щРН СЙЮГШБЮЕР, ВРН ЯКЕДСЧЫХИ ОЮПЮЛЕРП ОПЕДМЮГМЮВЕМ ДКЪ gawk. дКЪ НАКЕЦВЕМХЪ НАПЮАНРЙХ `-W' ОПХОХЯШБЮЕРЯЪ Й ТПНМРС НЯРЮЧЫХУЯЪ ЮПЦСЛЕМРНБ Х ОПНЯЛНРП ОПНДНКФЮЕРЯЪ. (щРН --- ОПХЕЛ Б sh-ОПНЦПЮЛЛХПНБЮМХХ. мЕ НАПЮЫЮИРЕ МЮ ЩРН БМХЛЮМХЪ, ЕЯКХ БШ МЕ ГМЮЙНЛШ Я sh.) -v -F щРХ ОЮПЮЛЕРПШ ГЮОНЛХМЮЧРЯЪ Х ОЕПЕДЮЧРЯЪ gawk. -f --file --file= -Wfile= хЛЪ ТЮИКЮ ГЮОНЛХМЮЕРЯЪ БН БПЕЛЕММНЛ ТЮИКЕ `/tmp/ig.s.$$' Я НОЕПЮРНПНЛ `@include'. сРХКХРЮ sed ХЯОНКЭГСЕРЯЪ ДКЪ СДЮКЕМХЪ БЕДСЫХУ ВЮЯРЕИ Я ОЮПЮЛЕРПЮЛХ ОЕПЕД ЮПЦСЛЕМРЮЛХ (МЮОПХЛЕП,`--file='). --source --source= -Wsource= рЕЙЯР source ОЕПЕДЮЕРЯЪ ОН echo Б `/tmp/ig.s.$$'. --version --version -Wversion igawk ОЕВЮРЮЕР МНЛЕП БЕПЯХХ, БШОНКМЪЕР `gawk --version' ДКЪ ОНКСВЕМХЪ ХМТНПЛЮЖХХ Н БЕПЯХХ gawk Х ДЕКЮЕР exit. еЯКХ МЕ АШКН `-f', `--file', `-Wfile', `--source', ХКХ `-Wsource', РН ОЕПБШЛ ЮПЦСЛЕМРНЛ ДНКФМЮ АШРЭ awk-ОПНЦПЮЛЛЮ. еЯКХ Б ЙНЛЮМДМНИ ЯРПНЙЕ МЕ НЙЮГЮКНЯЭ МХЙЮЙХУ ЮПЦСЛЕМРНБ, igawk ОЕВЮРЮЕР ЯННАЫЕМХЕ НА НЬХАЙЕ Х БШОНКМЪЕР exits. б ОПНРХБМНЛ ЯКСВЮЕ ОЕПБШИ ЮПЦСЛЕМР ОЕПЕДЮЕРЯЪ ОН echo Б `/tmp/ig.s.$$'. б КЧАНЛ ЯКСВЮЕ ОНЯКЕ НАПЮАНРЙХ ЮПЦСЛЕМРНБ `/tmp/ig.s.$$' ЯНДЕПФХР ОНКМШИ РЕЙЯР ХЯУНДМНИ awk-ОПНЦПЮЛЛШ. $$' Б sh ОПЕДЯРЮБКЪЕР МНЛЕП ID РЕЙСЫЕЦН ОПНЖЕЯЯЮ. нМ ВЮЯРН ХЯОНКЭГСЕРЯЪ Б ОПНЦПЮЛЛЮУ НАНКНВЙХ ДКЪ ЯНГДЮМХЪ СМХЙЮКЭМШУ ХЛЕМ БПЕЛЕММШУ ТЮИКНБ. щРН ОНГБНКЪЕР ЛМНЦХЛ ОНКЭГНБЮРЕКЪЛ ГЮОСЯЙЮРЭ igawk, МЕ ГЮАНРЪЯЭ Н ЙНМТКХЙРЮУ Я ХЛЕМЮЛХ БПЕЛЕММШУ ТЮИКНБ. бНР ЯЮЛЮ ОПНЦПЮЛЛЮ igawk: #! /bin/sh # igawk --- ОНДНАМЮ gawk МН ДЕКЮЕР НАПЮАНРЙС @include # Arnold Robbins, arnold@gnu.org, Public Domain # July 1993 if [ "$1" = debug ] then set -x shift else # НВХЯРЙЮ ОПХ exit, hangup, interrupt, quit, termination trap 'rm -f /tmp/ig.[se].$$' 0 1 2 3 15 fi while [ $# -ne 0 ] # ЖХЙК ОН ЮПЦСЛЕМРЮЛ do case $1 in --) shift; break;; -W) shift set -- -W"$@" continue;; -[vF]) opts="$opts $1 '$2'" shift;; -[vF]*) opts="$opts '$1'" ;; -f) echo @include "$2" ?? /tmp/ig.s.$$ shift;; -f*) f=`echo "$1" -- sed 's/-f//'` echo @include "$f" ?? /tmp/ig.s.$$ ;; -?file=*) # -Wfile or --file f=`echo "$1" -- sed 's/-.file=//'` echo @include "$f" ?? /tmp/ig.s.$$ ;; -?file) # get arg, $2 echo @include "$2" ?? /tmp/ig.s.$$ shift;; -?source=*) # -Wsource or --source t=`echo "$1" -- sed 's/-.source=//'` echo "$t" ?? /tmp/ig.s.$$ ;; -?source) # get arg, $2 echo "$2" ?? /tmp/ig.s.$$ shift;; -?version) echo igawk: version 1.0 1?&2 gawk --version exit 0 ;; -[W-]*) opts="$opts '$1'" ;; *) break;; esac shift done if [ ! -s /tmp/ig.s.$$ ] then if [ -z "$1" ] then echo igawk: no program! 1?&2 exit 1 else echo "$1" ? /tmp/ig.s.$$ shift fi fi # Б ЩРНИ РНВЙЕ /tmp/ig.s.$$ ЯНДЕПФХР ОПНЦПЮЛЛС. awk-ОПНЦПЮЛЛЮ ДКЪ НАПЮАНРЙХ ДХПЕЙРХБ `@include' ВХРЮЕР ОПНЦПЮЛЛС ЯРПНЙЮ ГЮ ЯРПНЙНИ Я ОНЛНЫЭЧ getline (ЯЛ. ПЮГДЕК 5.8 [ъБМШИ ББНД Я ОНЛНЫЭЧ getline], ЯРП. 53). хЛЕМЮ БУНДМШУ ТЮИКНБ Х НОЕПЮРНПШ `@include' НАПЮАЮРШБЮЧРЯЪ Я ОНЛНЫЭЧ ЯРЕЙЮ. йНЦДЮ НАМЮПСФХБЮЕРЯЪ НВЕПЕДМНИ `@include', ХЛЪ РЕЙСЫЕЦН ТЮИКЮ ЙКЮДЕРЯЪ МЮ ЯРЕЙ Х РЕЙСЫХЛ ТЮИКНЛ ЯРЮМНБХРЯЪ РНР, ЙНРНПШИ МЮГБЮМ Б ДХПЕЙРХБЕ `@include'. йНЦДЮ ТЮИК ГЮЙЮМВХБЮЕРЯЪ, ХГ ЯРЕЙЮ ХГБКЕЙЮЕРЯЪ БЕПУМХИ ТЮИК Х НОЪРЭ ЯРЮМНБХРЯЪ РЕЙСЫХЛ. оПНЖЕЯЯ МЮВХМЮЕРЯЪ, ЙНЦДЮ Б ЯРЕЙ ЙКЮДЕРЯЪ ХЯУНДМШИ ТЮИК. тСМЙЖХЪ pathto ОПНДЕКШБЮЕР ПЮАНРС МЮУНФДЕМХЪ ОНКМНЦН ОСРХ Й ТЮИКС. нМЮ ЛНДЕКХПСЕР ОНБЕДЕМХЕ gawk ОПХ ОНХЯЙЕ ОЕПЕЛЕММНИ НЙПСФЕМХЪ AWKPATH (ЯЛ. ПЮГДЕК 14.3 [оЕПЕЛЕММЮЪ НЙПСФЕМХЪ AWKPATH], ЯРП. 166). еЯКХ ХЛЪ ТЮИКЮ ХЛЕЕР Б ЯЕАЕ `/', ОНХЯЙ ОСРХ МЕ ОПНХГБНДХРЯЪ. б ОПНРХБМНЛ ЯКСВЮЕ ХЛЪ ТЮИКЮ ЯНЕДХМЪЕРЯЪ Я ХЛЕМЕЛ ЙЮФДНЦН ЙЮРЮКНЦЮ МЮ ОСРХ Х ДЕКЮЕРЯЪ ОНОШРЙЮ НРЙПШРЭ ТЮИК Я ЦЕМЕПХПНБЮММШЛ РЮЙ ХЛЕМЕЛ. еДХМЯРБЕММШИ ОСРЭ Б awk ДКЪ ОПНБЕПЙХ РНЦН, ВРН ТЮИК ЛНФЕР АШРЭ ОПНВРЕМ, ЕЯРЭ ОНОШРЙЮ ВРЕМХЪ ЕЦН ОН getline; ЩРН Х ОПНДЕКШБЮЕР pathto. *5* еЯКХ ТЮИК ВХРЮЕРЯЪ, НМ ГЮЙПШБЮЕРЯЪ Х ЕЦН ХЛЪ БНГБПЮЫЮЕРЯЪ ТСМЙЖХЕИ. gawk -- ' # НАПЮАНРЙЮ ДХПЕЙРХБ @include function pathto(file, i, t, junk) 5 б ЯЮЛШУ ЯРЮПШУ БЕПЯХЪУ awk РЕЯР `getline junk ! t' ЛНФЕР ГЮЖХЙКХРЭЯЪ, ЕЯКХ ТЮИК ЯСЫЕЯРБСЕР, МН ОСЯР. - if (index(file, "/") != 0) return file for (i = 1; i != ndirs; i++) - t = (pathlist[i] "/" file) if ((getline junk ! t) ? 0) - # ЕЯКХ МЮИДЕМ close(t) return t "" "" return "" "" цКЮБМЮЪ ОПНЦПЮЛЛЮ ЯНДЕПФХРЯЪ БМСРПХ ОПЮБХКЮ BEGIN. оЕПБНЕ, ВРН НМЮ ДЕКЮЕР, ЩРН СЯРЮМНБЙЮ ЛЮЯЯХБЮ pathlist, ЙНРНПШИ ХЯОНКЭГСЕР pathto. оНЯКЕ ПЮГДЕКЕМХЪ ОСРХ МЮ `:' ОСЯРШЕ ЩКЕЛЕМРШ ГЮЛЕМЪЧРЯЪ МЮ "." ЙНРНПШЕ ОПЕДЯРЮБКЪЧР РЕЙСЫХИ ЙЮРЮКНЦ. BEGIN - path = ENVIRON["AWKPATH"] ndirs = split(path, pathlist, ":") for (i = 1; i != ndirs; i++) - if (pathlist[i] == "") pathlist[i] = "." "" яРЕЙ ХМХЖХЮКХГХПСЕРЯЪ ГМЮВЕМХЕЛ ARGV[1], ЙНРНПНЕ АСДЕР `/tmp/ig.s.$$'. гЮРЕЛ ХДЕР ЦКЮБМШИ ЖХЙК. бУНДМШЕ ЯРПНЙХ ВХРЮЧРЯЪ ДПСЦ ГЮ ДПСЦНЛ. яРПНЙХ, ЙНРНПШЕ МЕ МЮВХМЮЧРЯЪ Я `@include', ОЕВЮРЮЧРЯЪ ДНЯКНБМН. еЯКХ ЯРПНЙЮ МЮВХМЮЕРЯЪ Я `@include', РН ХЛЪ ТЮИКЮ МЮУНДХРЯЪ Б $2. бШГШБЮЕРЯЪ pathto ДКЪ ЦЕМЕПЮЖХХ ОНКМНЦН ОСРХ. оПХ МЕСДЮВЕ ЛШ ОЕВЮРЮЕЛ ЯННАЫЕМХЕ НА НЬХАЙЕ Х ОПНДНКФЮЕЛ ПЮАНРС. яКЕДСЧЫЕЕ, ВРН МСФМН ЯДЕКЮРЭ, ЩРН ОПНБЕПХРЭ, МЕ АШК КХ ЩРНР ТЮИК БЙКЧВЕМ ПЮМЕЕ. нАПЮАЮРШБЮЕЛШИ ЛЮЯЯХБ ХМДЕЙЯХПНБЮМ ОНКМШЛХ ХЛЕМЮЛХ ЙЮФДНЦН БЙКЧВЕММНЦН (ОН @inckude) ТЮИКЮ, Х ЩРНР ТЮЙР ОНГБНКЪЕР МЮЛ ОНКСВХРЭ МСФМСЧ ХМТНПЛЮЖХЧ. еЯКХ ТЮИК СФЕ БЯРПЕВЮКЯЪ, ОЕВЮРЮЕРЯЪ ОПЕДСОПЕФДЕМХЕ НА ЩРНЛ. б ОПНРХБМНЛ ЯКСВЮЕ МНБШИ ТЮИК ЙКЮДЕРЯЪ МЮ БЕПЬХМС ЯРЕЙЮ Х ОПНЖЕЯЯ ОПНДНКФЮЕРЯЪ. мЮЙНМЕЖ, ЙНЦДЮ getline НАМЮПСФХБЮЕР ЙНМЕЖ БУНДМНЦН ТЮИКЮ, НМ ГЮЙПШБЮЕРЯЪ Х ХГ ЯРЕЙЮ ХГБКЕЙЮЕРЯЪ БЕПУМХИ ЩКЕЛЕМР. йНЦДЮ СЙЮГЮРЕКЭ ЯРЕЙЮ ЯРЮМНБХРЯЪ ЛЕМЭЬЕ МСКЪ, ОПНЦПЮЛЛЮ ЙНМВЮЕР ПЮАНРС: stackptr = 0 input[stackptr] = ARGV[1] # ARGV[1] ЕЯРЭ ОЕПБШИ ТЮИКfor (; stackptr ?= 0; stackptr--) - while ((getline ! input[stackptr]) ? 0) - if (tolower($1) != "@include") - print continue "" fpath = pathto($2) if (fpath == "") - printf("igawk:%s:%d: cannot find %s"n", " input[stackptr], FNR, $2) ? "/dev/stderr" continue "" if (! (fpath in processed)) - processed[fpath] = input[stackptr] input[++stackptr] = fpath "" else print $2, "included in", input[stackptr], " "already included in", " processed[fpath] ? "/dev/stderr" "" close(input[stackptr]) "" ""' /tmp/ig.s.$$ ? /tmp/ig.e.$$ оНЯКЕДМХИ ЬЮЦ ЯНЯРНХР Б БШГНБЕ gawk ДКЪ ХЯОНКМЕМХЪ ПЮЯЬХПЕММНИ ОПНЦПЮЛЛШ Я НПХЦХМЮКЭМШЛХ ОЮПЮЛЕРПЮЛХ Х ЮПЦСЛЕМРЮЛХ ЙНЛЮМДМНИ ЯРПНЙХ, СЙЮГЮММШЛХ ОНКЭГНБЮРЕКЕЛ. яРЮРСЯ ОПХ НЙНМВЮМХХ gawk ОЕПЕДЮЕРЯЪ НАПЮРМН Й БШГНБС ОПНЦПЮЛЛШ igawk. eval gawk -f /tmp/ig.e.$$ $opts -- "$@" exit $? оПХБЕДЕММЮЪ БЕПЯХЪ igawk ОПЕДЯРЮБКЪЕР ЛНИ РПЕРХИ БЮПХЮМР ЩРНИ ОПНЦПЮЛЛШ. хЛЕЧРЯЪ РПХ ЙКЧВЕБШУ СОПНЫЕМХЪ, ЙНРНПШЕ ГЮЯРЮБКЪЧР ОПНЦПЮЛЛС ПЮАНРЮРЭ КСВЬЕ. 1. хЯОНКЭГНБЮМХЕ `@include' ДЮФЕ ДКЪ ТЮИКНБ, МЮГБЮММШУ Я `-f', ДЕКЮЕР ОНЯРПНЕМХЕ ХЯУНДМНИ ЯНАПЮММНИ awk-ОПНЦПЮЛЛШ ЛМНЦН АНКЕЕ ОПНЯРШЛ; БЯЕ `@include' НАПЮАЮРШБЮЧРЯЪ ГЮ НДХМ ПЮГ. 2. тСМЙЖХЪ pathto МЕ ЯРЮПЮЕРЯЪ ГЮОНЛМХРЭ ЯРПНЙС, ОПНВРЕММСЧ getline ОПХ ОПНБЕПЙЕ ДНЯРСОМНЯРХ ТЮИКЮ . оНОШРЙЮ ГЮОНЛМХРЭ ЩРС ЯРПНЙС ДКЪ ХЯОНКЭГНБЮМХЪ Я ЦКЮБМНИ ОПНЦПЮЛЛНИ ГМЮВХРЕКЭМН СЯКНФМЪЕР ПЮАНРС. 3. хЯОНКЭГНБЮМХЕ ЖХЙКЮ getline Б ОПЮБХКЕ BEGIN ОНГБНКЪЕР ЯДЕКЮРЭ БЯЕ ЩРН Б НДМНЛ ЛЕЯРЕ. мЕР МЕНАУНДХЛНЯРХ СЯРПЮХБЮРЭ НРДЕКЭМШИ ЖХЙК ДКЪ НАПЮАНРЙХ БКНФЕММШУ ДХПЕЙРХБ `@include'. хРЮЙ, ЩРЮ ОПНЦПЮЛЛЮ ХККЧЯРПХПСЕР, ВРН ВЮЯРН ЯРНХР ЙНЛАХМХПНБЮРЭ ОПНЦПЮЛЛШ МЮ sh Х awk БЛЕЯРЕ. нАШВМН РЮЙ СДЮЕРЯЪ ЯДЕКЮРЭ ДНБНКЭМН ЛМНЦНЕ, МЕ ОПХАЕЦЮЪ Й ОПНЦПЮЛЛХПНБЮМХЧ МЮ МХГЙНЛ СПНБМЕ Я ОНЛНЫЭЧ яХ ХКХ яХ++, Х ОПХ ЩРНЛ ВЮЯРН КЕЦВЕ ОНКСВЮРЭ НОПЕДЕКЕММНЦН ПНДЮ ЖЕОНВЙХ Х ЛЮМХОСКХПНБЮРЭ ЮПЦСЛЕМРЮЛХ, ХЯОНКЭГСЪ НАНКНВЙС, ВЕЛ ЩРН ДЕКЮЕРЯЪ Б awk. мЮЙНМЕЖ, igawk ОНЙЮГШБЮЕР, ВРН МЕ БЯЕЦДЮ МЕНАУНДХЛН ДНАЮБКЪРЭ МНБШЕ ВЕПРШ Й ОПНЦПЮЛЛЕ; ВЮЯРН АЕГ МХУ ЛНФМН КЕЦЙН НАНИРХЯЭ. вРН ЙЮЯЮЕРЯЪ igawk, РН МЕР БЕЯЙХУ ОПХВХМ ЯРПНХРЭ НАПЮАНРЙС `@include' Б ЯЮЛНИ gawk. йЮЙ ДНОНКМХРЕКЭМШИ ОПХЛЕП Й ЯЙЮГЮММНЛС, ПЮЯЯЛНРПХЛ ХДЕЧ ХЛЕРЭ ДБЮ ТЮИКЮ Б ЙЮРЮКНЦЕ МЮ ОСРХ ОНХЯЙЮ. `default.awk'щРНР ТЮИК ДНКФЕМ ЯНДЕПФЮРЭ ОН СЛНКВЮМХЧ МЕЙНЕ ЛМНФЕЯРБН АХАКХНРЕВМШУ ТСМЙЖХИ, РЮЙХУ ЙЮЙ getopt Х assert. `site.awk'щРНР ТЮИК ДНКФЕМ ЯНДЕПФЮРЭ АХАКХНРЕВМШЕ ТСМЙЖХХ, ЙНРНПШЕ ЯОЕЖХТХВМШ ДКЪ ЯЮИРЮ ХКХ СЯРЮМНБЙХ, Р.Е. КНЙЮКЭМН ПЮГПЮАНРЮММШУ ТСМЙЖХИ. хЛЕЪ НРДЕКЭМШИ ТЮИК, ЛНФМН ХГЛЕМЪРЭ `default.awk' ЯНЦКЮЯМН МНБШЛ БШОСЯЙЮЛ gawk, МЕ РПЕАСЪ НР ЯХЯРЕЛМНЦН ЮДЛХМХЯРПЮРНПЮ НАМНБКЪРЭ ЕЦН ЙЮФДШИ ПЮГ ДНАЮБКЕМХЕЛ КНЙЮКЭМШУ ТСМЙЖХИ. нДХМ ОНКЭГНБЮРЕКЭ ОПЕДКНФХК, ВРНАШ gawk АШК ЛНДХТХЖХПНБЮМ ЮБРНЛЮРХВЕЯЙХЛ ВРЕМХЕЛ ЩРХУ ТЮИКНБ ОПХ ЙЮФДНЛ ГЮОСЯЙЕ. бЛЕЯРН ЩРНЦН, АШКН АШ НВЕМЭ ОПНЯРН ОПХЯОНЯНАХРЭ ДКЪ ЩРНЦН igawk. оНЯЙНКЭЙС igawk ЛНФЕР НАПЮАЮРШБЮРЭ БКНФЕММШЕ ДХПЕЙРХБШ `@include', РН `default.awk' ЛНФЕР ОПНЯРН ЯНДЕПФЮРЭ ДХПЕЙРХБШ `@include' ДКЪ ФЕКЮРЕКЭМШУ АХАКХНРЕВМШУ ТСМЙЖХИ. |
<<< | нЦКЮБКЕМХЕ | яРПЮМХЖШ: 16 17 | >>> |