Когда мы раскрываем раздел Awk В этой части серии статей мы рассмотрим концепцию встроенных переменных в Awk. В Awk можно использовать два типа переменных: определяемые пользователем переменные, которые мы рассмотрели в Часть 8 и встроенный переменные.
Встроенный переменные имеют значения, уже определенные в Awk, но мы также можем осторожно изменить эти значения, встроенные переменные включают:
ИМЯ ФАЙЛА
: имя текущего входного файла (не изменять имя переменной)FR
: номер текущей строки ввода (то есть строки ввода 1, 2, 3… и т. д., имя переменной не менять)NF
: количество полей в текущей строке ввода (не менять имя переменной)OFS
: разделитель выходных полейFS
: разделитель полей вводаОРС
: разделитель выходной записиRS
: разделитель входной записиДавайте перейдем к иллюстрации использования некоторых встроенных переменных Awk, описанных выше:
Чтобы прочитать имя текущего входного файла, вы можете использовать ИМЯ ФАЙЛА
встроенная переменная следующим образом:
$ awk '{print FILENAME}' ~ / domains.txt
Вы поймете, что имя файла печатается для каждой строки ввода, что является поведением по умолчанию Awk когда вы используете ИМЯ ФАЙЛА
встроенная переменная.
С использованием NR
чтобы подсчитать количество строк (записей) во входном файле, помните, что он также считает пустые строки, как мы увидим в примере ниже.
Когда мы просматриваем файл domains.txt с использованием команда кота, это содержит 14 строки с текстом и пустые 2 линии:
$ cat ~ / domains.txt.
$ awk 'END {print "Количество записей в файле:", NR}' ~ / domains.txt
Чтобы подсчитать количество полей в записи или строке, мы используем встроенную переменную NR следующим образом:
$ cat ~ / names.txt.
$ awk '{print «Запись:», NR, «имеет», NF, «поля»; } '~ / names.txt.
Затем вы также можете указать разделитель полей ввода, используя FS
встроенная переменная, она определяет, как Awk делит строки ввода на поля.
Значение по умолчанию для FS
является пространство и вкладка, но мы можем изменить значение FS
любому символу, который будет указывать Awk на соответствующее разделение входных строк.
Сделать это можно двумя способами:
Рассмотрим файл /etc/passwd в системе Linux поля в этом файле разделены с помощью :
символ, поэтому мы можем указать его в качестве нового разделителя поля ввода, когда мы хотим отфильтровать определенные поля, как в следующих примерах:
Мы можем использовать -F
вариант следующим образом:
$ awk -F ':' '{print $ 1, $ 4;}' / etc / passwd.
При желании мы также можем воспользоваться FS
встроенная переменная, как показано ниже:
$ awk 'BEGIN {FS = «:»; } {напечатайте $ 1, $ 4; } '/ etc / passwd.
Чтобы указать разделитель полей вывода, используйте OFS
встроенная переменная, она определяет, как поля вывода будут разделены с помощью символа, который мы используем, как в примере ниже:
$ awk -F ':' 'BEGIN {OFS = "==>";} {print $ 1, $ 4;}' / etc / passwd.
В этом Часть 10., мы исследовали идею использования встроенных переменных Awk, которые имеют предопределенные значения. Но мы также можем изменить эти значения, хотя это не рекомендуется делать, если вы не знаете, что делаете, с надлежащим пониманием.
После этого мы перейдем к рассмотрению того, как мы можем использовать переменные оболочки в командных операциях Awk, поэтому оставайтесь подключенными к Tecmint.