Для обработки и анализа текстовых файлов в Linux часто используется скриптовый язык AWK. Условные операторы и циклы — удобные инструменты языка сценариев, которые могут значительно упростить задачу фильтрации данных в больших файлах. В этой статье мы рассмотрим условные операторы if/else
и основные виды циклов. А также приведем примеры их использования.
Также советуем ознакомиться с двенадцатой статьей из цикла: Как использовать переменные shell в AWK.
Содержание:
Условные операторы в AWK
Условные операторы — это инструкции в программировании, которые позволяют выполнять различные действия в зависимости от некоторого условия. Такие операторы часто используются для фильтрации и обработки данных. В AWK, как и в большинстве языков программирования, присутствуют условные операторы if/else
.
Прежде всего, оператор if
проверяет, выполняется ли заданное условие (или набор условий, объединенных логическими операторами). Если условие выполняется — будут исполнены соответствующие наборы инструкций (команд). Если же ни одно из условий не является истинным, могут быть выполнены инструкции, указанные после оператора else
.
Синтаксис условных операторов в AWK имеет следующий вид:
Если нужно проверить несколько условий по отдельности, то можно использовать помимо if
и else
оператор else if
:
Для примера напишем команду с условным оператором if/else
:
Этот код выполняет следующие действия:
- Для каждой строки файла проверяет, больше или равно второе поле (
$2
) 20. - Если это условие выполняется, то выводятся первое поле (
$1
) и третье поле ($3
) данной записи. - Если это условие не выполняется, то выводятся первое поле и строка
has less than 20 works
.
Циклы в AWK
В AWK есть несколько типов циклов, которые позволяют повторять определенные команды или действия в зависимости от заданных условий. Наиболее распространенными являются циклы for
, while
и do-while
. Рассмотрим детальнее каждый из них:
for
— выполняет блок кода заданное количество раз на основе указанного диапазона значений;while
— выполняет блок кода до тех пор, пока условие истинно;do-while
— выполняет блок кода один раз, а затем проверяет условие, чтобы определить, должен ли блок кода быть выполнен снова.
Приведем примеры для каждого из этих циклов.
Использование цикла for
Как Вам известно, AWK разбивает каждую строку текстового документа на поля. Для примера напишем команду с циклом for
, которая выводит на экран каждое поле файла students.txt
с новой строки:
Детальнее рассмотрим конструкцию самого цикла:
i=1
— переменнаяi
инициализируется со значением 1;i<=NF
— цикл повторяется до тех пор, пока значение i меньше или равно значению встроенной переменнойNF
(определяющей количество полей в текущей обрабатываемой строке);i++
— операция пост-инкремента увеличивает значениеi
на 1, пока оно не станет равным числу полей в строке;print $i
— выводит каждое поле на отдельной строке.
Использование цикла while
В отличии от for
, цикл while
используется для выполнения повторяющихся операций, пока выполняется определенное условие. Допустим, нам нужно отформатировать вывод строк на экран таким образом, чтобы поля были разделены табуляцией. Для этого используем следующий код:
Данная команда выполняет следующие действия:
i=1
— устанавливает начальное значение счетчикаi
равное 1;while(i<=NF)
— запускает цикл, который будет выполняться до тех пор, пока значение i не превысит количество полей в текущей строке (то есть — значение переменнойNF
;printf("%s\t", $i)
— на каждой итерации цикла выводит на экран значения поля$i
, разделяя их с помощью табуляции (\t
);i++
— операция пост-инкремента увеличивает значениеi
на 1, пока оно не станет равным числу полей в строке;printf("\n")
— после вывода всех полей текущей записи добавляет символ\n
, чтобы следующая запись выводилась с новой строки.
Использование цикла do-while
В этом цикле блок кода будет выполняться до тех пор, пока условие в скобках не вернет логическое значение True
. Отличие от while
заключается в том, что блок кода в do-while
будет выполнен хотя бы один раз, даже если условие изначально будет ложным. В качестве примера приведем команду с do-while
, которая выведет на экран все поля файла students.txt
с новой строки:
Проанализируем использованный код:
i=1
— устанавливает начальное значение счетчикаi
равное 1.do {print $i; i++}
— часть циклаdo-while
, которая выводит на экран каждое поле таблицы с новой строки, и увеличивает значениеi
на 1, пока оно не станет равным числу полей в строке;while(i<=NF)
— запускает цикл, который будет выполняться до тех пор, пока значение i не превысит количество полей в текущей строке (то есть — значение переменнойNF
).
Выводы
В статье были рассмотрены основные принципы использования условных операторов и циклов в AWK. Вы узнали, как реализовывать условные ветвления блоков команд в зависимости от значения переменных. А также, как циклы позволяют автоматизировать повторяющиеся операции при фильтрации данных. Знание этих основных конструкций позволит улучшить производительность обработки данных в AWK и повысить эффективность работы с этим инструментом.
Спасибо за время, уделенное прочтению статьи!
Если возникли вопросы — задавайте их в комментариях.
Подписывайтесь на обновления нашего блога и оставайтесь в курсе новостей мира инфокоммуникаций!
Чтобы знать больше и выделяться знаниями среди толпы 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.