Если необходимо включить в список скрытые файлы, следует вместо команду ls -l задать команду 1s -la.
9.2.9. Встроенные переменные
Утилита awk имеет ряд встроенных переменных, которые позволяют получить подробную информацию о входном потоке и настройках awk. Значения некоторых переменных можно изменять. В табл. 9.3 кратко описаны основные переменные.
Таблица 9.3. Встроенные переменные awk
Переменная | Что содержит |
ARGC | Количество аргументов в командной строке (поддерживается только: в nawk и gawk) |
ARGV | Массив аргументов командной строки (поддерживается только в nawk и gawk) |
ENVIRON | Массив переменных среды (поддерживается только в nawk и gawk) |
FILENAME | Имя файла, обрабатываемого в текущий момент |
FNR | Количество уже обработанных записей в текущем файле (поддерживается только в nawk и gawk) |
FS | Разделитель полей во входном потоке (по умолчанию пробел); аналогична опции -F командной строки |
NF | Количество полей в текущей записи |
NR | Количество обработанных записей во входном потоке |
OFS | Разделитель полей в выходном потоке (по умолчанию пробел) |
ORS | Разделитель записей в выходном потоке (по умолчанию символ новой строки) |
RS | Разделитель записей во входном потоке (по умолчанию символ |
новой строки) |
Переменная ARGC хранит число аргументов командной строки, переданной сценарию awk (точнее, nawk или gawk, т. к. эта переменная появилась только в новых версиях утилиты). Переменная argv хранит значения аргументов командной строки. Доступ к нужному аргументу осуществляется с помощью ссылки ARGV[n], где п — порядковый номер аргумента в командной строке.
Переменная environ хранит значения всех текущих переменных среды. Чтобы получить доступ к нужной переменной, следует указать ее имя, например:
ENVIRON["EDITOR"]=="vi"
Поскольку сценарий awk может обрабатывать большое количество файлов, предусмотрена переменная FILENAME, которая указывает на то, какой файл просматривается в текущий момент.
Переменная fnr хранит номер записи, которую утилита awk обрабатывает в текущий момент; ее значение меньше или равно значению переменной NR, которая отслеживает общее число обработанных записей входного потока. Если сценарий получает доступ более чем к одному файлу, переменная FNR сбрасывается в ноль при открытии каждого нового файла. В переменную NF записывается количество полей текущей записи. Ее значение сбрасывается по достижении конца записи.
Переменная FS содержит символ, используемый в качестве разделителя полей входного потока. Эту переменную можно установить из командной строки с помощью опиии -F. По умолчанию разделителем полей служит пробел. Переменная ofs содержит символ, являющийся разделителем полей в выходном потоке. По умолчанию это тоже пробел.
В переменной ORS хранится разделитель записей в выходном потоке. По умолчанию им является символ новой строки (\n). Переменная RS содержит разделитель записей во входном потоке (в большинстве случаев это тоже символ \n).
Переменные NF, NR и FILENAME
Представленная ниже команда позволяет быстро определить число записей во входном файле grade.txt. Значение переменной NR отображается по завершении обработки файла.
$ awk 'END {print NR}' grade.txt
В следующем примере на экран выводятся все записи исходного файла. Каждой из них предшествуют два числа: количество полей в записи (переменная NF) и номер записи в файле (переменная nr). В самом конце отображается имя входного файла (переменная FILENAME).
$ awk '{print NF, NR, $0} END {print FILENAME}' grade.txt
1 |
M. Tansley |
05/99 |
48311 |
Green |
8 |
40 |
44 |
2 |
J. Lulu |
06/99 |
48317 |
green |
9 |
24 |
26 |
3 |
P. Bunny |
02/99 |
48 |
Yellow |
12 |
35 |
28 |
4 |
J. Troll |
07/99 |
4842 |
Brown-3 |
12 |
26 |
26 |
5 |
L. Tansley |
05/99, |
4712 |
Brown-2 |
12 |
30 |
28 |