Фильтрация текста AWK по шаблону

Фильтрация текста AWK по шаблону

Рубрики:

Linux, Терминал Linux

Метки:

,

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

Также советуем ознакомиться с третьей статьей: Как вывести на экран поля и столбцы файла с помощью awk.

Содержание:

  1. Создание файла для фильтрации
  2. Использование шаблона для фильтрации AWK
    1. Выполнение команды print в AWK
    2. Выполнение команды printf в AWK
    3. Использование поля $0 в шаблоне AWK
  3. Выводы

Создание файла для фильтрации

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

 

cat courses awk

 

Использование шаблона для фильтрации AWK

После того как файл создан, можно переходить к его обработке. Для вывода отфильтрованного текста будем использовать две команды:

  • print;
  • printf.

Выполнение команды print в AWK

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

 

print star end awk

Данный код на языке AWK представляет собой два шаблона для поиска и фильтрации строк в файле courses.txt.

  1. Первый шаблон / *\$[0-2]\.[0-9][0-9] */ { print ; } ищет строки, в которых цена находится в диапазоне от $0.00 до $2.99, и выводит их без изменений с помощью команды print.
  2. Второй шаблон / *\$[3-9]\.[0-9][0-9] */ { print $1, $2, $3, $4, "*" ; } ищет строки, в которых цена находится в диапазоне от $3.00 до $9.99, и выводит их, добавляя звездочку * с помощью print $1, $2, $3, $4, "*".
  3. Знаки $ и . в регулярных выражениях обозначают, соответственно, конец строки и любой символ (кроме перевода строки). Чтобы использовать эти знаки в качестве обычных символов, их нужно экранировать символом «обратная коса» (Backslash) — \.

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

Этот код фильтрует строки в файле courses.txt по цене и добавляет звездочку в конце строк, где цена находится в диапазоне от $3.00 до $9.99.

 

Выполнение команды printf в AWK

Вы могли заметить, что в предыдущем примере поля строк, обозначенных в конце символом *, после обработки «съехали» влево. Чтобы отформатировать текст вывода, будем вместо print использовать в команде AWK оператор printf:

 

printf

На скриншоте видно, что содержимое файла стало похожим на таблицу. Рассмотрим детальнее использованную для этого конструкцию:

  1. В регулярных выражениях / *\$[3-9]\.[0-9][0-9] */ и / *\$[0-2]\.[0-9][0-9] */ применяются метасимволы, которые указывают на цены от $3.00 до $9.99 и от $0.00 до $2.99, соответственно.
  2. Команда printf используется для форматирования вывода, где:
    • %10s — означает, что поле занимает 10 символов;
    • %-10s — означает, что поле занимает 10 символов и выравнивается по левому краю;
    • %s — означает, что поле может содержать любое количество символов.
  3. На экран выводятся первые четыре поля каждой строки файла courses.txt. Если цена попадает в диапазон от $3.00 до $9.99, то в конце выводится знак *.

Использование поля $0 в шаблоне AWK

В AWK поле $0 представляет всю строку в текущей обрабатываемой записи. Это означает, что поиск будет производиться по всей строке. Если поле $0 не указано явно в команде, то по умолчанию скриптовый язык будет использовать именно его. Модифицируем нашу конструкцию следующим образом:

 

print S0

Данная команда AWK читает файл courses.txt и фильтрует строки по заданному шаблону:

  1. / *\$[3-9]\.[0-9][0-9] */ — шаблон для строк, содержащих цену от $3.00 до $9.99.
  2. { print $0 "*" ; } — действие, которое выполняется для строк, соответствующих первому шаблону, где $0 обозначает всю строку, а "*" добавляет символ звездочки в конец строки.
  3. / *\$[0-2]\.[0-9][0-9] */ — шаблон для строк, содержащих цену от $0.00 до $2.99.
  4. { print ; } — действие, которое выполняется для строк, соответствующих второму шаблону. В данном случае весь текст строки выводится без изменений.

Выводы

В статье были рассмотрены основные принципы фильтрации текста с помощью 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.
Вы должны согласиться с условиями для продолжения


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