img

Команды AWK в Linux – примеры синтаксиса в Linux и Unix

21 ноября
20:00
Бесплатный вебинар
Введение в Docker
Ведущий — Филипп Игнатенко.
Руководитель центра разработки
Записаться
img
img

 

Это руководство рассчитано на новичков, и здесь вы узнаете, что же такое команда awk. Кроме того, вы сможете ознакомиться с тем, как ее можно использовать при работе с текстом.

Приступим!

Что такое команда awk?

awk - это язык описания сценариев. Он поможет вам при работе с командной строкой. Кроме того, эту команды очень часто используют для обработки текста. 

С помощью awk вы можете выбирать данные (один или несколько фрагментов текста), опираясь на созданный шаблон. 

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

Базовый синтаксис команды awk

В самом простом варианте после команды awk следуют набор одинарных кавычек и набор фигурных скобок, в последнюю очередь пишется имя файла, который вы хотите найти. 

Это выглядит примерно вот так:

awk '{action}' your_file_name.txt

Если вы хотите найти текст, у которого есть определенный шаблон, или слово в тексте, то внешний вид команды будет следующим:

awk '/regex pattern/{action}' your_file_name.txt

Как создать файл-пример?

Для того, чтобы создать файл в командной строке, вам понадобиться команда touch.

Например,  touch filename.txt, где filename – это имя вашего файла.

После чего вы можете воспользоваться командой open (open filename.txt), которая откроет редактор текста, например, TextEdit, где вы сможете добавить содержимое файла. 

Итак, предположим, что у вас есть текстовый файл под названием information.txt, в котором хранятся данные, разделенные на несколько столбцов.

Содержимое файла выглядит примерно так:

fristName       lastName        age     city       ID

Thomas          Shelby          30      Rio        400
Omega           Night           45      Ontario    600
Wood            Tinker          54      Lisbon     N/A
Giorgos         Georgiou        35      London     300
Timmy           Turner          32      Berlin     N/A

В данном случае мы имеем столбцы firstNamelastNameagecity и ID.

Вы можете в любое время просмотреть содержимое вашего файла, набрав команду cat text_file, где text_file - это имя вашего файла.

Как напечатать все содержимое файла с помощью команды awk?

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

Это будет работать точно также, как команда cat, которую мы упомянули чуть выше.

awk '{print $0}' information.txt

Результат:

fristName       lastName        age     city       ID

Thomas          Shelby          30      Rio        400
Omega           Night           45      Ontario    600
Wood            Tinker          54      Lisbon     N/A
Giorgos         Georgiou        35      London     300
Timmy           Turner          32      Berlin     N/A

Если вы хотите пронумеровать строки, то для этого вам нужна встроенная переменная NR:

awk '{print NR,$0}' information.txt 
1 fristName     lastName        age     city       ID
2 
3 Thomas        Shelby          30      Rio        400
4 Omega         Night           45      Ontario    600
5 Wood          Tinker          54      Lisbon     N/A
6 Giorgos       Georgiou        35      London     300
7 Timmy         Turner          32      Berlin     N/A

Как напечатать определенные столбцы с помощью команды awk?

Вы можете указать какие-то конкретные столбцы, которые вы хотите напечатать. 

Для того, чтобы напечатать первый столбец, вам потребуется вот такая команда:

awk '{print $1}' information.txt

Результат:

Thomas
Omega
Wood
Giorgos
Timmy

$1 обозначает первое поле данных. В нашем случае это первый столбец.

Для того, чтобы напечатать второй столбец, вам нужно подставить в команду $2:

awk '{print $2}' information.txt

Результат:

lastName

Shelby
Night
Tinker
Georgiou
Turner

Как же команда awk определяет, где начинается и где заканчивается каждый столбец? По умолчанию она это делает по пробелам. 

Для того, чтобы напечатать больше, чем один столбец, например, первый и четвертый, вам нужно сделать следующее:

awk '{print $1, $4}' information.txt

Результат:

fristName city
 
Thomas    Rio
Omega     Ontario
Wood      Lisbon
Giorgos   London
Timmy     Berlin

$1 - это первое входное поле (первый столбец), а $4 - четвертое. Вы записываете их через запятую ($1, $4). В результате столбцы напечатаются через пробел, что обеспечит их читаемость. 

Для того, чтобы напечатать последнее поле данных (последний столбец), вам нужно подставить в команду $NF, что обозначает последнее поле в записи:

awk '{print $NF}' information.txt 

Результат:

ID

400
600
N/A
300
N/A

Как напечатать определенные строки столбца?

Помимо всего прочего вы можете выбрать столбец и указать его строки, которые вы хотите напечатать. 

awk '{print $1}' information.txt | head -1 

Результат:

FirstName

Давайте разберем эту команду поподробнее. Команда awk '{print $1}' information.txt печатает первый столбец. После чего с помощью вертикальной черты вывод этой команды (которую вы наблюдали ранее) передается команде head, где аргумент -1 отвечает за выбор первой сроки столбца.

Если вы хотите напечатать две строки, то команда будет выглядеть вот так:

awk '{print $1}' information.txt | head -2 

Результат:

FirstName
Dionysia

Как напечатать строки с помощью специального шаблона?

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

Например,

awk '/^O/' information.txt

Результат:

Omega           Night           45      Ontario    600

Эта команда выбирает все строки, которые начинаются с буквы O.

Для начала вы пишете символ ^, который указывает на то, что строка с этой буквы должна начинаться, после чего вы пишете букву, с которой должна начинаться строка.

Кроме того, вы можете напечатать строку, которая заканчивается определенным образом.

awk '/0$/' information.txt 

Результат:

Thomas          Shelby          30      Rio        400
Omega           Night           45      Ontario    600
Giorgos         Georgiou        35      London     300

Эта команда печатает все строки, которые заканчиваются на 0. Символ $, записанный после, указывает на то, что строка должна заканчиваться на этот символ.

Команду можно немного изменить:

awk '! /0$/' information.txt 

Символ ! используется вместо NOT. То есть в данном случае команда выбирает строки, которые НЕ заканчиваются на 0.

fristName       lastName        age     city       ID

Wood            Tinker          54      Lisbon     N/A
Timmy           Turner          32      Berlin     N/A

Как использовать регулярные выражения в awk?

Для того, чтобы вывести слова, которые содержат определенные буквы, и напечатать слова, которые соответствуют заданному шаблону, вам снова потребуется пара слешей, которую мы уже видели ранее.

Если вы хотите найти слова, которые содержат io, то вот какую команду вам нужно запустить:

awk ' /io/{print $0}' information.txt 

Результат:

Thomas          Shelby          30      Rio        400
Omega           Night           45      Ontario    600
Giorgos         Georgiou        35      London     300

В результате вы получите все записи, которые содержат сочетание io.

Допустим, что у вас есть еще один столбец - department:

fristName       lastName        age     city       ID   department

Thomas          Shelby          30      Rio        400  IT
Omega           Night           45      Ontario    600  Design
Wood            Tinker          54      Lisbon     N/A  IT
Giorgos         Georgiou        35      London     300  Data
Timmy           Turner          32      Berlin     N/A  Engineering

Для того, чтобы найти информацию обо всех людях, которые работают в IT-отделе (IT), вам нужно указать в слешах строку, которую вы ищете:

awk '/IT/' information.txt 

Результат:

Thomas          Shelby          30      Rio        400  IT
Wood            Tinker          54      Lisbon     N/A  IT

А что делать, если вы хотите увидеть только имя и фамилию людей, которые работают в IT-отделе (IT)? 

Вы можете указать соответствующие столбцы:

awk '/IT/{print $1, $2}' information.txt 

Результат:

Thomas Shelby
Wood   Tinker

В результате на экране отобразятся строки, в которых присутствует IT. Причем, отобразятся не все поля, а только первый и второй столбцы.

Могут возникать ситуации, когда при поиске слов по определенному шаблону, вам может потребоваться символ перехода (escape), например,

awk '/N\/A$/' information.txt 

Результат:

Wood            Tinker          54      Lisbon     N/A
Timmy           Turner          32      Berlin     N/A

Я хотел найти строки, который заканчиваются на N/A.

И потому, дабы избежать ошибки, записывая N/A, мне пришлось воспользоваться символом перехода (\). 

Как использовать операторы сравнения в awk?

Если вы, например, хотите найти информацию о сотрудниках, возраст которых не превышает 40 лет, то вам понадобиться оператор сравнения <:

awk '$3 <  40 { print $0 }' information.txt

Результат:

Thomas          Shelby          30      Rio        400
Giorgos         Georgiou        35      London     300
Timmy           Turner          32      Berlin     N/A

В результате вы получите информацию только о сотрудниках младше 40 лет.

Заключение

Вот оно! Теперь вы знаете, что такое awk, и умеете работать с ним и текстовыми данными. 

Ссылка
скопирована
Получите бесплатные уроки на наших курсах
Все курсы
Программирование
Скидка 25%
Python Advanced. Продвинутый курс
Освойте асинхронное и метапрограммирование, изучите аннотацию типов и напишите собственное приложение на FastAPI. Улучшите свои навыки Python, чтобы совершить быстрый рост вашего грейда до уровня middle.
Получи бесплатный
вводный урок!
Пожалуйста, укажите корректный e-mail
отправили вводный урок на твой e-mail!
Получи все материалы в telegram и ускорь обучение!
img
Еще по теме:
img
Гипервизор - это программное обеспечение для виртуализации, используемое для создания и запуска виртуальных машин (ВМ). Гипервиз
img
Виртуализация серверов позволяет запускать несколько виртуальных машин на одном физическом сервере. Запуск виртуальных машин (ВМ
img
Сегодня мы рассмотрим, как настроить и использовать PHP в проекте. Но прежде чем начать, нужно понять, что такое PHP. Что такое
img
Как разработчик, вы знаете, что HTML расшифровывается как HyperText Markup Language (язык разметки гипертекста). HTML — это язык
img
Бесконечные споры вокруг искусственного интеллекта приводят к путанице. Существует много терминов, которые кажутся похожими, но
img
SVG расшифровывается как масштабируемая векторная графика. Это веб-дружелюбный векторный формат файлов, используемый для отображ
21 ноября
20:00
Бесплатный вебинар
Введение в Docker