Руководство пользователя для 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). Синтаксически неправильные одно-символьные программы имеют тенденцию переполнять стек разбора и генерируют бесполезные сообщения. К удивлению, такие программы в самом общем случае трудно поддаются диагнозированию, и эффект от него не стоит затраченного труда. |
<<< | Оглавление | Страницы: 14 15 | >>> |