AWK - встроенные переменные
AWK предоставляет несколько встроенных переменных. Они играют важную роль при написании сценариев AWK. В этой главе демонстрируется использование встроенных переменных.
Стандартные переменные AWK
Стандартные переменные AWK обсуждаются ниже.
ARGC
Подразумевается количество аргументов, предоставленных в командной строке.
Example
[jerry]$ awk 'BEGIN {print "Arguments =", ARGC}' One Two Three Four
Выполнив этот код, вы получите следующий результат -
Output
Arguments = 5
Но почему AWK показывает 5, когда вы передали только 4 аргумента? Просто проверьте следующий пример, чтобы развеять ваши сомнения.
ARGV
Это массив, в котором хранятся аргументы командной строки. Допустимый индекс массива находится в диапазоне от 0 до ARGC-1.
Example
[jerry]$ awk 'BEGIN {
for (i = 0; i < ARGC - 1; ++i) {
printf "ARGV[%d] = %s\n", i, ARGV[i]
}
}' one two three four
Выполнив этот код, вы получите следующий результат -
Output
ARGV[0] = awk
ARGV[1] = one
ARGV[2] = two
ARGV[3] = three
CONVFMT
Он представляет собой формат преобразования чисел. Его значение по умолчанию%.6g.
Example
[jerry]$ awk 'BEGIN { print "Conversion Format =", CONVFMT }'
Выполнив этот код, вы получите следующий результат -
Output
Conversion Format = %.6g
ENVIRON
Это ассоциативный массив переменных среды.
Example
[jerry]$ awk 'BEGIN { print ENVIRON["USER"] }'
Выполнив этот код, вы получите следующий результат -
Output
jerry
Чтобы найти имена других переменных среды, используйте env команда.
ИМЯ ФАЙЛА
Он представляет текущее имя файла.
Example
[jerry]$ awk 'END {print FILENAME}' marks.txt
Выполнив этот код, вы получите следующий результат -
Output
marks.txt
Обратите внимание, что FILENAME не определено в блоке BEGIN.
FS
Он представляет собой разделитель (входного) поля, а его значение по умолчанию - пробел. Вы также можете изменить это, используя-F параметр командной строки.
Example
[jerry]$ awk 'BEGIN {print "FS = " FS}' | cat -vte
Выполнив этот код, вы получите следующий результат -
Output
FS = $
NF
Он представляет количество полей в текущей записи. Например, в следующем примере печатаются только те строки, которые содержат более двух полей.
Example
[jerry]$ echo -e "One Two\nOne Two Three\nOne Two Three Four" | awk 'NF > 2'
Выполнив этот код, вы получите следующий результат -
Output
One Two Three
One Two Three Four
NR
Он представляет собой номер текущей записи. Например, в следующем примере запись печатается, если текущий номер записи меньше трех.
Example
[jerry]$ echo -e "One Two\nOne Two Three\nOne Two Three Four" | awk 'NR < 3'
Выполнив этот код, вы получите следующий результат -
Output
One Two
One Two Three
FNR
Он похож на NR, но относительно текущего файла. Это полезно, когда AWK работает с несколькими файлами. Значение FNR сбрасывается с новым файлом.
OFMT
Он представляет собой номер выходного формата, а его значение по умолчанию - %.6g.
Example
[jerry]$ awk 'BEGIN {print "OFMT = " OFMT}'
Выполнив этот код, вы получите следующий результат -
Output
OFMT = %.6g
OFS
Он представляет собой разделитель выходных полей, а его значение по умолчанию - пробел.
Example
[jerry]$ awk 'BEGIN {print "OFS = " OFS}' | cat -vte
Выполнив этот код, вы получите следующий результат -
Output
OFS = $
ОРС
Он представляет собой разделитель выходной записи, а его значение по умолчанию - новая строка.
Example
[jerry]$ awk 'BEGIN {print "ORS = " ORS}' | cat -vte
Выполнив приведенный выше код, вы получите следующий результат -
Output
ORS = $
$
ДЛИНА
Он представляет собой длину строки, соответствующей matchфункция. Функция соответствия AWK ищет заданную строку во входной строке.
Example
[jerry]$ awk 'BEGIN { if (match("One Two Three", "re")) { print RLENGTH } }'
Выполнив этот код, вы получите следующий результат -
Output
2
RS
Он представляет собой (входной) разделитель записей, а его значение по умолчанию - новая строка.
Example
[jerry]$ awk 'BEGIN {print "RS = " RS}' | cat -vte
Выполнив этот код, вы получите следующий результат -
Output
RS = $
$
RSTART
Он представляет собой первую позицию в строке, совпадающую с match функция.
Example
[jerry]$ awk 'BEGIN { if (match("One Two Three", "Thre")) { print RSTART } }'
Выполнив этот код, вы получите следующий результат -
Output
9
ПОДПИСЬ
Он представляет собой символ-разделитель для индексов массива, а его значение по умолчанию - \034.
Example
[jerry]$ awk 'BEGIN { print "SUBSEP = " SUBSEP }' | cat -vte
Выполнив этот код, вы получите следующий результат -
Output
SUBSEP = ^\$
$ 0
Он представляет собой всю входную запись.
Example
[jerry]$ awk '{print $0}' marks.txt
Выполнив этот код, вы получите следующий результат -
Output
1) Amit Physics 80
2) Rahul Maths 90
3) Shyam Biology 87
4) Kedar English 85
5) Hari History 89
$ n
Он представляет собой n- е поле в текущей записи, где поля разделены FS.
Example
[jerry]$ awk '{print $3 "\t" $4}' marks.txt
Выполнив этот код, вы получите следующий результат -
Output
Physics 80
Maths 90
Biology 87
English 85
History 89
Специфические переменные GNU AWK
Специфические переменные GNU AWK следующие:
АРГИНД
Он представляет собой индекс текущего обрабатываемого файла в ARGV.
Example
[jerry]$ awk '{
print "ARGIND = ", ARGIND; print "Filename = ", ARGV[ARGIND]
}' junk1 junk2 junk3
Выполнив этот код, вы получите следующий результат -
Output
ARGIND = 1
Filename = junk1
ARGIND = 2
Filename = junk2
ARGIND = 3
Filename = junk3
BINMODE
Он используется для указания двоичного режима для всех файловых операций ввода-вывода в системах, отличных от POSIX. Числовые значения 1, 2 или 3 указывают, что входные файлы, выходные файлы или все файлы, соответственно, должны использовать двоичный ввод-вывод. Строковые значенияr или wукажите, что входные или выходные файлы, соответственно, должны использовать двоичный ввод-вывод. Строковые значенияrw или wr укажите, что все файлы должны использовать двоичный ввод-вывод.
ERRNO
Строка указывает на ошибку при сбое перенаправления для getline или если close вызов не удается.
Example
[jerry]$ awk 'BEGIN { ret = getline < "junk.txt"; if (ret == -1) print "Error:", ERRNO }'
Выполнив этот код, вы получите следующий результат -
Output
Error: No such file or directory
ПОЛЯ
Устанавливается список разделенных пробелами переменных ширины полей, GAWK анализирует ввод в поля фиксированной ширины, вместо того, чтобы использовать значение переменной FS в качестве разделителя полей.
ИГНОРИРОВАТЬ
Когда эта переменная установлена, GAWK не учитывает регистр. Следующий пример демонстрирует это -
Example
[jerry]$ awk 'BEGIN{IGNORECASE = 1} /amit/' marks.txt
Выполнив этот код, вы получите следующий результат -
Output
1) Amit Physics 80
LINT
Обеспечивает динамическое управление --lintвариант из программы GAWK. Когда эта переменная установлена, GAWK печатает предупреждения о ворсинах. При присвоении строковому значению фатального предупреждения о линтах становятся фатальными ошибками, точно так же, как--lint=fatal.
Example
[jerry]$ awk 'BEGIN {LINT = 1; a}'
Выполнив этот код, вы получите следующий результат -
Output
awk: cmd. line:1: warning: reference to uninitialized variable `a'
awk: cmd. line:1: warning: statement has no effect
ПРОЦИНФО
Это ассоциативный массив, содержащий информацию о процессе, такую как реальные и эффективные номера UID, номер идентификатора процесса и так далее.
Example
[jerry]$ awk 'BEGIN { print PROCINFO["pid"] }'
Выполнив этот код, вы получите следующий результат -
Output
4316
ТЕКСТДОМЕН
Он представляет собой текстовую область программы AWK. Он используется для поиска локализованных переводов строк программы.
Example
[jerry]$ awk 'BEGIN { print TEXTDOMAIN }'
Выполнив этот код, вы получите следующий результат -
Output
messages
Приведенный выше вывод показывает английский текст из-за en_IN регион