Язык AWK — мощный инструмент командной строки для фильтрации текстовых файлов, который позволяет выполнять множество операций с данными, включая форматирование и анализ. Встроенные переменные в AWK играют важную роль в обработке документов. В этой статье мы рассмотрим наиболее часто используемые встроенные переменные AWK и их практическое использование.
Также советуем ознакомиться с десятой статьей из цикла: Как использовать блоки BEGIN и END в AWK.
Содержимое:
- Что такое встроенные переменные AWK
- Использование переменной NF
- Использование переменной NR
- Применение переменной OFS в AWK
- Применение переменной ORS в AWK
- Как использовать сразу несколько встроенных переменных
- Выводы
Что такое встроенные переменные AWK
Встроенные переменные в AWK — это такие переменные, которые определены по умолчанию. Они могут хранить в себе информацию о текущем поле, строке, записи и других атрибутах файла данных, обрабатываемого AWK. Встроенных переменных существует большое количество, ниже будут перечислены лишь наиболее важные из них:
FS
— разделитель полей входных данных (по умолчанию — пробел).OFS
— разделитель полей выходных данных (по умолчанию — пробел).NF
— количество полей в текущей записи.RS
— разделитель строк во входном файле (по умолчанию — символ новой строки).ORS
— разделитель строк в выходном документе (по умолчанию — символ новой строки).NR
— номер текущей записи.$0
— вся текущая запись целиком.$1
,$2
,$3
, … — поля текущей строки (первое, второе, третье и т.д.).FILENAME
— название текущего обрабатываемого файла.
На примерах использования встроенных переменных мы рассмотрим, как они помогают обрабатывать текстовые данные в файле более эффективно.
Использование переменной NF
Внутренняя переменная NF
(от англ. Number of Fields) хранит в себе значение количества полей в текущей строке. Поле — это часть строки, разделенная определенным символом (зачастую пробелом). Эта переменная также используется для обращения к последнему полю в строке (например, чтобы вывести его содержимое, можно использовать $NF
).
Для демонстрации вариантов использования внутренних переменных будем работать с файлом students.txt
из предыдущих статей цикла о скриптовом языке AWK в Linux. Допустим, нам нужно узнать сколько полей содержится в каждой строке файла. Для этого будем использовать следующую команду:
Разберем детальнее эту часть команды {print $0, "has", NF, "fields"}
:
$0
— переменная, которая означает всю строку;NF
— внутренняя переменная, которая содержит количество полей в каждой строке.
Использование переменной NR
В AWK внутренняя переменная NR
(от англ. Number of Records) представляет собой номер текущей обрабатываемой строки во входных данных. Она автоматически инкрементируется (увеличивается) на 1 после обработки каждой записи во входном файле или потоке. Внутренняя переменная NR
обычно используется для сбора статистики, вычисления номера строки и т. д.
Для примера выведем на экран порядковый номер в первом поле каждой строки файла students.txt
:
Сценарный язык печатает сначала номер записи (соответствующее значение переменной NR
), а затем выводит всю строку.
Применение переменной OFS в AWK
Внутренняя переменная OFS
(от англ. Output Field Separator) используется для выбора разделителя между полями при выводе данных на экран или в файл. По умолчанию разделитель — пробел, но его можно изменить на любой другой символ (тире, запятую, табуляцию, точку с запятой и т. п.). К примеру, разделим поля строк нашего файла табуляциями:
Синтаксис команды:
-v OFS='\t'
— опция для замены значения переменнойOFS
на символ табуляции\t
;{print $1, $2, $3}
— команда для вывода значений первого, второго и третьего полей каждой строки файла;students.txt
— название файла, который будет обрабатываться AWK.
Применение переменной ORS в AWK
Внутренняя переменная ORS
(от англ. Output Record Separator) в AWK определяет символ, который будет использоваться для разделения записей в выходных данных. По умолчанию значение ORS
равно символу новой строки — \n
. Однако, пользователь может задать собственный разделитель для выводимых данных.
Давайте разделим строки файла students.txt
тройными дефисами:
Проанализируем использованную команду:
ORS
— встроенная переменная, которая определяет символ разделения выводимых записей;\n---\n
— значение, которое будет использоваться для разделения строк;{print $1,$2,$3}
— команда, которая выводит содержимое записей файла, разделяя их символом, определенным в переменнойORS
.
Как использовать сразу несколько встроенных переменных
Возможности скриптового языка разрешают одновременное использование нескольких переменных в одном выражении. Допустим, что нам нужно немного отформатировать таблицу из файла students.txt
и в конце вывода указать общее количество строк документа. Для решения поставленной задачи будем использовать команду:
Этот код использует несколько встроенных переменных AWK — NR
, OFS
и ORS
:
BEGIN
— блок, в котором переменнымOFS
иORS
присваиваются новые значения.OFS
— переменная, которая задает табуляцию в качестве разделитель выходных полей.ORS
— переменная, которая задает двойной перевод строки как разделитель записей.print NR, $1, $2, $3
— выражение, которое выводит на экран номер текущей записи (NR
) и значения полей$1
,$2
,$3
из файла.END
— блок, в котором выводится общее количество записей (NR
) в файле.
Выводы
Встроенные переменные позволяют получать различную информацию о содержимом обрабатываемого файла. С их помощью Вы сможете форматировать вывод команд в терминале Linux, настраивая собственные символы разделителя полей, строк и много другое. Использование встроенных переменных поможет Вам значительно упростить процесс обработки файлов, а также улучшить читаемость вывода.
Спасибо за время, уделенное прочтению статьи!
Если возникли вопросы — задавайте их в комментариях.
Подписывайтесь на обновления нашего блога и оставайтесь в курсе новостей мира инфокоммуникаций!
Чтобы знать больше и выделяться знаниями среди толпы IT-шников, записывайтесь на курсы Cisco, курсы по кибербезопасности, полный курс по кибербезопасности, курсы DevNet / DevOps (программируемые системы) от Академии Cisco, курсы Linux от Linux Professional Institute на платформе SEDICOMM University (Университет СЭДИКОММ).
Курсы Cisco, Linux, кибербезопасность, DevOps / DevNet, Python с трудоустройством!
- Поможем стать экспертом по сетевой инженерии, кибербезопасности, программируемым сетям и системам и получить международные сертификаты Cisco, Linux LPI, Python Institute.
- Предлагаем проверенную программу с лучшими учебниками от экспертов из Cisco Networking Academy, Linux Professional Institute и Python Institute, помощь сертифицированных инструкторов и личного куратора.
- Поможем с трудоустройством и стартом карьеры в сфере IT — 100% наших выпускников трудоустраиваются.
- Проведем вечерние онлайн-лекции на нашей платформе.
- Согласуем с вами удобное время для практик.
- Если хотите индивидуальный график — обсудим и реализуем.
- Личный куратор будет на связи, чтобы ответить на вопросы, проконсультировать и мотивировать придерживаться сроков сдачи экзаменов.
- Всем, кто боится потерять мотивацию и не закончить обучение, предложим общение с профессиональным коучем.
- отредактировать или создать с нуля резюме;
- подготовиться к техническим интервью;
- подготовиться к конкурсу на понравившуюся вакансию;
- устроиться на работу в Cisco по специальной программе. Наши студенты, которые уже работают там: жмите на #НашиВCisco Вконтакте, #НашиВCisco Facebook.