Руководство пользователя для GNU Awk
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.
Назад | Вперед
Содержание (общее) | Содержание раздела
Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:
|