Основные встроенные переменные AWK

Основные встроенные переменные AWK

Рубрики:

Linux, Терминал Linux

Метки:

,

Язык AWK — мощный инструмент командной строки для фильтрации текстовых файлов, который позволяет выполнять множество операций с данными, включая форматирование и анализ. Встроенные переменные в AWK играют важную роль в обработке документов. В этой статье мы рассмотрим наиболее часто используемые встроенные переменные AWK и их практическое использование.

Также советуем ознакомиться с десятой статьей из цикла: Как использовать блоки BEGIN и END в AWK.

Содержимое:

  1. Что такое встроенные переменные AWK
  2. Использование переменной NF
  3. Использование переменной NR
  4. Применение переменной OFS в AWK
  5. Применение переменной ORS в AWK
  6. Как использовать сразу несколько встроенных переменных
  7. Выводы

Что такое встроенные переменные AWK

Встроенные переменные в AWK — это такие переменные, которые определены по умолчанию. Они могут хранить в себе информацию о текущем поле, строке, записи и других атрибутах файла данных, обрабатываемого AWK. Встроенных переменных существует большое количество, ниже будут перечислены лишь наиболее важные из них:

  1. FS — разделитель полей входных данных (по умолчанию — пробел).
  2. OFS — разделитель полей выходных данных (по умолчанию — пробел).
  3. NF — количество полей в текущей записи.
  4. RS — разделитель строк во входном файле (по умолчанию — символ новой строки).
  5. ORS — разделитель строк в выходном документе (по умолчанию — символ новой строки).
  6. NR — номер текущей записи.
  7. $0 — вся текущая запись целиком.
  8. $1, $2, $3, … — поля текущей строки (первое, второе, третье и т.д.).
  9. FILENAME — название текущего обрабатываемого файла.

На примерах использования встроенных переменных мы рассмотрим, как они помогают обрабатывать текстовые данные в файле более эффективно.

 

Использование переменной NF

Внутренняя переменная NF (от англ. Number of Fields) хранит в себе значение количества полей в текущей строке. Поле — это часть строки, разделенная определенным символом (зачастую пробелом). Эта переменная также используется для обращения к последнему полю в строке (например, чтобы вывести его содержимое, можно использовать $NF).

Для демонстрации вариантов использования внутренних переменных будем работать с файлом students.txt из предыдущих статей цикла о скриптовом языке AWK в Linux. Допустим, нам нужно узнать сколько полей содержится в каждой строке файла. Для этого будем использовать следующую команду:

 

NF awk

Разберем детальнее эту часть команды {print $0, "has", NF, "fields"}:

  • $0 — переменная, которая означает всю строку;
  • NF — внутренняя переменная, которая содержит количество полей в каждой строке.

Использование переменной NR

В AWK внутренняя переменная NR (от англ. Number of Records) представляет собой номер текущей обрабатываемой строки во входных данных. Она автоматически инкрементируется (увеличивается) на 1 после обработки каждой записи во входном файле или потоке. Внутренняя переменная NR обычно используется для сбора статистики, вычисления номера строки и т. д.

Для примера выведем на экран порядковый номер в первом поле каждой строки файла students.txt:

 

NR

Сценарный язык печатает сначала номер записи (соответствующее значение переменной NR), а затем выводит всю строку.

Применение переменной OFS в AWK

Внутренняя переменная OFS (от англ. Output Field Separator) используется для выбора разделителя между полями при выводе данных на экран или в файл. По умолчанию разделитель — пробел, но его можно изменить на любой другой символ (тире, запятую, табуляцию, точку с запятой и т. п.). К примеру, разделим поля строк нашего файла табуляциями:

 

OFS awk

Синтаксис команды:

  • -v OFS='\t' — опция для замены значения переменной OFS на символ табуляции \t;
  • {print $1, $2, $3} — команда для вывода значений первого, второго и третьего полей каждой строки файла;
  • students.txt — название файла, который будет обрабатываться AWK.

Применение переменной ORS в AWK

Внутренняя переменная ORS (от англ. Output Record Separator) в AWK определяет символ, который будет использоваться для разделения записей в выходных данных. По умолчанию значение ORS равно символу новой строки — \n. Однако, пользователь может задать собственный разделитель для выводимых данных.

Давайте разделим строки файла students.txt тройными дефисами:

 

ORS

Проанализируем использованную команду:

  • ORS — встроенная переменная, которая определяет символ разделения выводимых записей;
  • \n---\n — значение, которое будет использоваться для разделения строк;
  • {print $1,$2,$3} — команда, которая выводит содержимое записей файла, разделяя их символом, определенным в переменной ORS.

Как использовать сразу несколько встроенных переменных

Возможности скриптового языка разрешают одновременное использование нескольких переменных в одном выражении. Допустим, что нам нужно немного отформатировать таблицу из файла students.txt и в конце вывода указать общее количество строк документа. Для решения поставленной задачи будем использовать команду:

 

several-var awk

Этот код использует несколько встроенных переменных AWK NR, OFS и ORS:

  1. BEGIN — блок, в котором переменным OFS и ORS присваиваются новые значения.
  2. OFS — переменная, которая задает табуляцию в качестве разделитель выходных полей.
  3. ORS — переменная, которая задает двойной перевод строки как разделитель записей.
  4. print NR, $1, $2, $3 — выражение, которое выводит на экран номер текущей записи (NR) и значения полей $1, $2, $3 из файла.
  5. END — блок, в котором выводится общее количество записей (NR) в файле.

Выводы

Встроенные переменные позволяют получать различную информацию о содержимом обрабатываемого файла. С их помощью Вы сможете форматировать вывод команд в терминале Linux, настраивая собственные символы разделителя полей, строк и много другое. Использование встроенных переменных поможет Вам значительно упростить процесс обработки файлов, а также улучшить читаемость вывода.

Спасибо за время, уделенное прочтению статьи!

Если возникли вопросы — задавайте их в комментариях.

Подписывайтесь на обновления нашего блога и оставайтесь в курсе новостей мира инфокоммуникаций!

Чтобы знать больше и выделяться знаниями среди толпы IT-шников, записывайтесь на курсы Ciscoкурсы по кибербезопасностиполный курс по кибербезопасностикурсы DevNet / DevOps (программируемые системы) от Академии Ciscoкурсы Linux от Linux Professional Institute на платформе SEDICOMM University (Университет СЭДИКОММ).

Курсы Cisco, Linux, кибербезопасность, DevOps / DevNet, Python с трудоустройством!

Спешите подать заявку! Группы стартуют 25 января, 26 февраля, 22 марта, 26 апреля, 24 мая, 21 июня, 26 июля, 23 августа, 20 сентября, 25 октября, 22 ноября, 20 декабря.
Что Вы получите?
  • Поможем стать экспертом по сетевой инженерии, кибербезопасности, программируемым сетям и системам и получить международные сертификаты Cisco, Linux LPI, Python Institute.
  • Предлагаем проверенную программу с лучшими учебниками от экспертов из Cisco Networking Academy, Linux Professional Institute и Python Institute, помощь сертифицированных инструкторов и личного куратора.
  • Поможем с трудоустройством и стартом карьеры в сфере IT — 100% наших выпускников трудоустраиваются.
Как проходит обучение?
  • Проведем вечерние онлайн-лекции на нашей платформе.
  • Согласуем с вами удобное время для практик.
  • Если хотите индивидуальный график — обсудим и реализуем.
  • Личный куратор будет на связи, чтобы ответить на вопросы, проконсультировать и мотивировать придерживаться сроков сдачи экзаменов.
  • Всем, кто боится потерять мотивацию и не закончить обучение, предложим общение с профессиональным коучем.
А еще поможем Вам:
  • отредактировать или создать с нуля резюме;
  • подготовиться к техническим интервью;
  • подготовиться к конкурсу на понравившуюся вакансию;
  • устроиться на работу в Cisco по специальной программе. Наши студенты, которые уже работают там: жмите на #НашиВCisco Вконтакте, #НашиВCisco Facebook.
Чтобы учиться на курсах Cisco, Linux LPI, кибербезопасность, DevOps / DevNet, Python, подайте заявку или получите бесплатную консультацию.

Рубрики:

Linux, Терминал Linux

Метки:

,

Больше похожих постов

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Заполните поле
Заполните поле
Пожалуйста, введите корректный адрес email.
Вы должны согласиться с условиями для продолжения


Поиск по сайту
Лучшее
Популярное
Рубрики
Меню