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

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

Рубрики:

Linux, Терминал Linux

Метки:

,

Для обработки и анализа текстовых файлов в Linux часто используется скриптовый язык AWK. Условные операторы и циклы — удобные инструменты языка сценариев, которые могут значительно упростить задачу фильтрации данных в больших файлах. В этой статье мы рассмотрим условные операторы if/else и основные виды циклов. А также приведем примеры их использования.

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

Содержание:

  1. Условные операторы в AWK
  2. Циклы в AWK
    1. Использование цикла for в AWK
    2. Использование цикла while в AWK
    3. Использование цикла do-while в AWK
  3. Выводы

Условные операторы в AWK

Условные операторы — это инструкции в программировании, которые позволяют выполнять различные действия в зависимости от некоторого условия. Такие операторы часто используются для фильтрации и обработки данных. В AWK, как и в большинстве языков программирования, присутствуют условные операторы if/else.

Прежде всего, оператор if проверяет, выполняется ли заданное условие (или набор условий, объединенных логическими операторами). Если условие выполняется — будут исполнены соответствующие наборы инструкций (команд). Если же ни одно из условий не является истинным, могут быть выполнены инструкции, указанные после оператора else.

Синтаксис условных операторов в AWK имеет следующий вид:

 

Если нужно проверить несколько условий по отдельности, то можно использовать помимо if и else оператор else if:

 

Для примера напишем команду с условным оператором if/else:

 

if-else awk

Этот код выполняет следующие действия:

  1. Для каждой строки файла проверяет, больше или равно второе поле ($2) 20.
  2. Если это условие выполняется, то выводятся первое поле ($1) и третье поле ($3) данной записи.
  3. Если это условие не выполняется, то выводятся первое поле и строка has less than 20 works.

Циклы в AWK

В AWK есть несколько типов циклов, которые позволяют повторять определенные команды или действия в зависимости от заданных условий. Наиболее распространенными являются циклы for, while и do-while. Рассмотрим детальнее каждый из них:

  • for — выполняет блок кода заданное количество раз на основе указанного диапазона значений;
  • while — выполняет блок кода до тех пор, пока условие истинно;
  • do-while — выполняет блок кода один раз, а затем проверяет условие, чтобы определить, должен ли блок кода быть выполнен снова.

Приведем примеры для каждого из этих циклов.

Использование цикла for

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

 

for

Детальнее рассмотрим конструкцию самого цикла:

  1. i=1 — переменная i инициализируется со значением 1;
  2. i<=NF — цикл повторяется до тех пор, пока значение i меньше или равно значению встроенной переменной NF (определяющей количество полей в текущей обрабатываемой строке);
  3. i++ — операция пост-инкремента увеличивает значение i на 1, пока оно не станет равным числу полей в строке;
  4. print $i — выводит каждое поле на отдельной строке.

Использование цикла while

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

 

while-awk

Данная команда выполняет следующие действия:

  1. i=1 — устанавливает начальное значение счетчика i равное 1;
  2. while(i<=NF) — запускает цикл, который будет выполняться до тех пор, пока значение i не превысит количество полей в текущей строке (то есть — значение переменной NF;
  3. printf("%s\t", $i) — на каждой итерации цикла выводит на экран значения поля $i, разделяя их с помощью табуляции (\t);
  4. i++ — операция пост-инкремента увеличивает значение i на 1, пока оно не станет равным числу полей в строке;
  5. printf("\n") — после вывода всех полей текущей записи добавляет символ \n, чтобы следующая запись выводилась с новой строки.

Использование цикла do-while

В этом цикле блок кода будет выполняться до тех пор, пока условие в скобках не вернет логическое значение True. Отличие от while заключается в том, что блок кода в do-while будет выполнен хотя бы один раз, даже если условие изначально будет ложным. В качестве примера приведем команду с do-while, которая выведет на экран все поля файла students.txt с новой строки:

 

do-while awk

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

  1. i=1 — устанавливает начальное значение счетчика i равное 1.
  2. do {print $i; i++} — часть цикла do-while, которая выводит на экран каждое поле таблицы с новой строки, и увеличивает значение i на 1, пока оно не станет равным числу полей в строке;
  3. while(i<=NF) — запускает цикл, который будет выполняться до тех пор, пока значение i не превысит количество полей в текущей строке (то есть — значение переменной NF).

Выводы

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

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

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

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

Чтобы знать больше и выделяться знаниями среди толпы 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.
Вы должны согласиться с условиями для продолжения


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