руководство пользователя для gnu awk
14. запуск awk
имеются два пути для запуска awk: с явной программой или с одним или более программными файлами. здесь мы приводим трафареты для обоих способов; объекты, заключенные в `[...]' в этих трафаретах необязательны. кроме традиционных однобуквенных параметров в стиле posix, gawk также имеет длинные параметры gnu. awk [параметры] -f progfile [--] file ... awk [параметры] [--] 'program' file ... можно запустить awk с пустой программой: $ awk '' datafile1 datafile2 такое действие имеет мало смысла; awk просто молчаливо закончится, если ему подсунуть пустую программу (d.c.). если `--lint' был указан в командной строке, gawk сообщит, что программа пуста. 14.1 параметры командной строкипараметры начинаются с символа dash и состоят из одного символа. длинные параметры в стиле gnu состоят из двух dash и ключевого слова. ключевые слова могут сокращаться, если сокращение однозначно определяет параметр. если параметр имеет аргумент, то немедленно за ключевым словом следует знак равенства (`=') и значение аргумента, или ключевое слово и аргумент разделяются знаками whitespace. для краткости ниже мы ссылаемся только на традиционно короткие параметры; однако короткие и длинные параметры взаимозаменяемы во всех контекстах. каждый длинный параметр для gawk имеет соответствующий параметр в стиле posix. параметры и их значения таковы: -f fs --field-separator fsустанавливает в переменной fs значение fs (см. раздел 5.5 [указание того, как разделяются поля], стр.44). -f source-file --file source-fileуказывает, что awk-программа должна быть взята из входного файла (вместо первого аргумента, не являющегося параметром). -v var=val --assign var=valприсвоить переменной var значение val перед началом выполнения программы. эти значения доступны внутри правил begin (см. раздел 14.2 [другие аргументы командной строки], стр. 165). параметр `-v' может установить только одну переменную, но его можно использовать много раз, каждый раз с новой переменной, подобно следующему: `awk -v foo=1 -v bar=2 ...'.-mf nnn -mr nnn устанавливает различные пределы памяти для значения nnn. флажок `f' устанавливает максимальное число полей, а флажок `r' устанавливает максимальный размер записи. эти два флажка и параметр `-m' взяты из версии bell labs research для unix awk. они нужны для совместимости, поскольку gawk не имеет предопределенных лимитов. -w gawk-optсогласно стандарту posix параметры, которые представляют особенность реализации, добавляются в качестве аргументов параметра `-w'. эти параметры также имеют соответствующие стилю gnu длинные параметры. см. ниже. -- означает конец параметров командной строки. следующие за этим аргументы не считаются параметрами даже если они начинаются с `-'. такая интерпретация пары `--' определена стандартом posix. это полезно, если имеются файлы с именами, начинающимися с `-', или в сценариях оболочки, если вы имеете имена файлов, указываемых пользователем, который может начинать их с `-'. доступны следующие специфичные для gawk параметры: -w traditional -w compat --traditional--compat определяет режим совместимости, в котором все расширения gnu языка awk недействительны и gawk ведет себя подобно версии bell labs research для unix awk. `--traditional' есть предпочтительная форма этого параметра. см. раздел 17.5 [расширения в gawk, отсутствующие в posix awk], стр. 256, где делается обзор расширений. также см. раздел c.1 [совместимость вниз и отладка], стр. 295. -w copyleft -w copyright --copyleft --copyrightпечатают короткие версии general public license и затем прекращают работу. эти параметры могут быть убраны из будущих версий gawk. -w help -w usage --help --usageпечатают сообщение "usage" с обзором коротких и длинных форм параметров, которые принимает gawk и затем производят exit. -w lint --lintпредупреждают о конструкциях, которые сомнительны или непереносимы на другие реализации. некоторые предостережения выдаются, когда gawk вначале читает программу. другие выдаются при ее исполнении. -w lint-old --lint-oldпредупреждает о конструкциях, которые недоступны в оригинальной версии 7 unix awk (см. раздел 17.1 [главные различия между v7 и svr3.1], стр. 253). -w posix --posixдействия строго в режиме posix. отменяет все расширения gawk (подобно `--traditional'), и добавляет дополнительно следующие ограничения: управляющие последовательности \x не распознаются (см. раздел 4.2 [управляющие последовательности], стр. 24). newlines не действуют как whitespace для разделения полей, когда fs равна одному пробелу. синоним func для ключевого слова function не распознается (см. раздел 13.1 [синтаксис определения функции], стр. 153). операторы `**' и `**=' нельзя употреблять вместо `^' и `^=' (см. раздел 7.5 [арифметические операторы], стр. 82, а также раздел 7.7 [выражения присваивания], стр. 84). указание `-ft' в командной строке не устанавливает значение fs на один символ tab (см. раздел 5.5 [указания как разделять поля], стр. 44). встроенная функция fflush не действует (см. раздел 12.4 [встроенные функции для ввода/вывода], стр. 146). если в командной строке указаны и `--traditional' и `--posix', то будет действовать режим `--posix'. gawk также выдаст сообщение, если присутствуют оба параметра. -w re-interval --re-intervalдопускает интервальные выражения (см. раздел 4.3 [операторы регулярных выражений], стр. 26), в регулярных выражениях. так как интервальные выражения традиционно недоступны в awk, gawk по умолчанию не допускает их. это предотвращает прерывания старых awk-программ. -w source program-text --source program-textисходный программный код извлекается из текста программы. этот параметр позволяет смешивать исходный код в файлах с исходным кодом, который вы пишите в командной строке. это особенно полезно, когда вы имеете библиотечные функции, которые хотите использовать из программ в командной строке (см. раздел 14.3 [переменная окружения awkpath], стр. 166). -w version --versionпечатает информацию о версии используемой копии gawk. это позволяет определить, является ли ваша копия gawk последней по отношению к тем, которые распространяет free software foundation. это также полезно для ваших сообщений об обнаруженных ошибках (см. раздел b.7 [сообщения о проблемах и ошибках], стр. 292). всякие другие параметры отмечаются как неправильные и игнорируются. в режиме совместимости, как специальный случай, если значение fs, устанавливаемое параметром `-f', есть `t', то fs устанавливается на символ tab ("\t"). это верно только при `--traditional'и неверно при `--posix' (см. раздел 5.5 [указания о разделении полей], стр. 44). параметр `-f' может использоваться более одного раза в командной строке. если это так, awk читает свою программу из всех названных файлов, так, как если бы они были соединены в один большой файл. это полезно для создания библиотек функций awk. полезные функции могут быть написаны один раз и затем выбираться из стандартного места, вместо того, чтобы включаться в каждую индивидуальную программу. можно печатать программу на терминале и пользоваться библиотечными функциями, указывая `-f /dev/tty'. awk будет читать file с терминала для использования как часть awk-программы. набрав свою программу, напечатайте control-d (символ конца файла)для указания ее конца. (можно также использовать `-f -' для чтения исходной программы с стандартного ввода, но тогда вы не будете в состоянии использовать стандартный ввод как источник данных.) вследствие того, что неудобно использовать стандартные механизмы awk для смеси входного файла и программ из командной строки, gawk предлагает параметр `--source'. он не требует от вас преимущественного использования стандартного ввода для входной программы и позволяет легко смешивать входной код из командной строки с кодом из библиотеки (см. раздел 14.3 [переменная окружения awkpath], стр. 166). если не указаны ни `-f' ни `--source', то gawk будет использовать первый аргумент в командной строке, который не является параметром, как текст из входной программы. если имеется переменная окружения posixly.correct, то gawk будет действовать строго в режиме posix, как если бы был указан параметр командной строки `--posix'. многие программы gnu ищут эту переменную окружения, включающую режим строгий режим posix. если в командной строке указать `--lint' и gawk перейдет в режим posix по posixly.correct, то он напечатает предупреждение, указывающее, что задействован режим posix. обычно эту переменную устанавливают в стартовом файле оболочки. в случае оболочки, совместимой с bourne (такой как bash), следует добавить эту строку к файлу `.profile' в вашем начальном каталоге: posixly.correct=true export posixly.correctв случае оболочки, совместимой с csh, *1* следует добавить такую строку к файлу `.login' в вашем начальном каталоге: setenv posixly.correct true14.2 другие аргументы командной строкивсякие дополнительные аргументы командной строки нормально рассматриваются как входные файлы для обработки в указанном порядке. однако, аргумент, который имеет вид var=value, присваивает значение value переменной var и вовсе не означает никакой файл. все такие аргументы доступны вашей awk-программе в массиве argv (см. главу 10 [встроенные переменные], стр. 115). параметры командной строки и текст программы ( если он присутствовал) не попадают в argv. все другие аргументы, включая присваивания переменным, попадают в него. при обработке любого элемента argv gawk устанавливает переменную argind на индекс текущего элемента argv. различие между аргументами имен файлов и присваиваний переменным определяется, когда awk собирается открыть следующий входной файл. в этой точке выполнения программы он проверяет "file name" чтобы проверить, не есть ли это присваивание переменной; если так, то awk вместо чтения файла присваивает значение переменной. поэтому переменные получают значения фактически после прочтения всех файлов, указанных ранее этого присваивания. в частности, значения таких переменных недоступны внутри правила begin (см. раздел 8.1.5 [специальные образцы begin и end, стр. 100), потому что такие правила выполняются до начала сканирования списка аргументов. в значениях переменных, заданных в командной строке, обрабатываются управляющие последовательности (d.c.) (см. раздел 4.2 [управляющие последовательности], стр. 24). в некоторых ранних реализациях, когда присваивания переменным встречались до имен файлов, они выполнялись до выполнения правил begin. тем самым поведение awk было непоследовательным. 1 не рекомендуется.некоторые присваивания из командной строки оказывались доступными внутри правил begin, а другие нет. некоторые приложения зависели от этого "свойства". когда awk была изменена для устранения противоречий, параметр `-v' был добавлен для обеспечения приложений, которые зависели от прежнего поведения. возможность присваивания из командной строки наиболее удобна для присваивания таким переменным как rs, ofs и ors, которые управляют форматом ввода и вывода, перед просмотром файлов с данными. это также полезно для проверки состояния, если необходимы повторные просмотры файлов с данными. например: awk 'pass == 1 { pass 1 stuff } pass == 2 { pass 2 stuff }' pass=1 mydata pass=2 mydata имея возможность присваивания переменным, не обязательно пользоваться параметром `-f' для установки значения fs. он остается для исторической совместимости. 14.3 переменная окружения awkpathв предыдущем разделе говорилось о том, как программные файлы awk могут быть названы в командной строке с помощью параметра `-f'. в большинстве реализаций awk можно указать точный путь к каждому программному файлу, когда он не лежит в текущем каталоге. но в gawk, если имя файла, указанного параметром `-f', не содержит `/', то gawk просматривает список каталогов (называемый search path) один за другим, отыскивая файл с указанным именем. search path есть цепочка, состоящая из имен каталогов, разделенных двоеточиями. gawk получает путь к ней из переменной окружения awkpath. если этой переменной нет, то gawk использует путь по умолчанию, который есть `.:/usr/local/share/awk'. *2* (программы, написанные для использования системным администратором, должны использовать переменную awkpath, которая не содержит текущий каталог, `.'.) возможность поиска пути особенно удобна для построения библиотек полезных функций awk. библиотечные файлы могут быть помещены в стандартный каталог на пути по умолчанию и затем указаны в командной строке коротким файловым именем. иначе для каждого файла нужно будет указывать полное файловое имя. используя оба параметра, `--source' и `-f', ваша awk-программа в командной строке может использовать средства файловой библиотеки awk. см. главу 15 [библиотека функций awk], стр. 169. 2 ваша версия gawk может использовать каталог, отличный от `/usr/local/share/awk'; это зависит от того, как gawk был построен и установлен. фактический каталог будет значением `$(datadir)', генерированным, когда gawk конфигурировалась. вероятно, вам не стоит заботиться об этом. поиск пути не производится, если gawk работает в режиме совместимости. это также верно для обоих параметров `--traditional' и `--posix'. см. раздел 14.1 [параметры командной строки], стр. 161. замечание: если вы хотите, чтобы находились файлы из текущего каталога, вы должны включить текущий каталог в путь поиска, либо включив явно `.' в путь, либо написав нулевой вход в путь. (нулевой вход указывается посредством начала или окончания пути двоеточием, или помещением двух двоеточий подряд (`::').) если текущий каталог не включен в путь поиска, то файлы в текущем каталоге не будут найдены. такой механизм поиска идентичен оболочечному. начиная с версии 3.0, если awkpath не определен в окружении, gawk поместит свой путь по умолчанию в environ["awkpath"]. это позволяет легко определить фактический путь поиска, используемый gawk. 14.4 устаревшие параметры и/или возможностив этом разделе описываются возможности и/или параметры командной строки из прежних выпусков gawk, которые или недоступны в текущей версии, или еще поддерживаются, но не рекомендуются (имея ввиду, что их не будет в следующем выпуске). в версии 3.0.4 gawk не имеется параметров командной строки или других не рекомендуемых черт из прежней версии gawk. таким образом, настоящий раздел в основном представляет место для средств, которые будут отсутствовать в будущих версиях gawk. 14.5 недокументированные параметры и свойстваэтот раздел намеренно оставлен пустым.14.6 известные ошибки в gawkпараметр `-f' для изменения значения fs (см. раздел 14.1 [параметры командной строки], стр. 161) не обязательно имеет свойство присваивания переменным командной строки; он остается только для совместимости вниз. если ваша система фактически имеет поддержку для `/dev/fd' и соответствующих файлов `/dev/stdin', `/dev/stdout' и `/dev/stderr', можно получать другие выходы от gawk по сравнению с теми, которые можно получить в системе без этих файлов. когда gawk интерпретирует эти файлы внутренним образом, она синхронизирует вывод по стандартному выходу с выводом в `/dev/stdout', в то время как в системах с такими файлами вывод действительно идет в различные открытые файлы (см. раздел 6.7 [специальные имена файлов в gawk], стр. 72). синтаксически неправильные одно-символьные программы имеют тенденцию переполнять стек разбора и генерируют бесполезные сообщения. к удивлению, такие программы в самом общем случае трудно поддаются диагнозированию, и эффект от него не стоит затраченного труда. |
<<< | оглавление | >>> |