awk

Последнее обновление: 12.03.2024

Утилита awk представляет еще один мощный инструмент для работы с текстовыми файлами, предоставляя множество возможностей. Команда awk имеет следующий формат:

awk '/pattern/{action}' file

Сначала команде awk передается параметр pattern - шаблон (регулярное выражение), которому должен сооответствовать текст. Обычно шаблоны заключаются между косыми чертами. Далее идет параметр action, который задает действия над найденным соответствием. Действия заключаются в фигурные скобки. Поскольку awk работает с регулярными выражениями, то шаблон разумно помещать в одинарные кавычки, чтобы оболочка случайно не интерпретировала их.

И в конце команде передается файл для поиска соответствий.

Если шаблон не указан, то действие выполняется над каждой строкой файла. Если действие не указано, awk просто показывает строки, соответствующие шаблону.

Например, пусть в домашнем каталоге пользователя у нас есть следующий файл users.txt

Tom:39:Microsoft
Bob:43:Google
Sam:28:Jetbrains
Alice:34:Microsoft
Kate:25:Google
Tim:23:-
Tomas:31:Apple

Условно говоря, каждая строка содержит данные пользователя - имя, возраст, компанию, то есть три поля. И каждое поле отделено от других двоеточием. То есть каждая строка имеет формат имя:возраст:компания

Допустим, нам надо получить все строки, где имя пользователя - "Tom":

eugene@Eugene:~$ awk '/Tom/' users.txt
Tom:39:Microsoft
Tomas:31:Apple

Утилита awk предоставляет ряд интересных возможностей, в частности, awk позволяет работать с файлами в табличной структурой, как наш файл. Например, для awk разделителем полей в строке по умолчанию является пробел. Однако в нашем файле таким разделителем является двоеточие. С помощью опции -F можно установить символ, который будет применяться в качестве разделителя.

Например, выведем только компанию, в которой работают пользователи с именем "Tom":

eugene@Eugene:~$ awk -F : '/Tom/{print $3}' users.txt
Microsoft
Apple

Здесь опции -F передается разделитель - двоеточие. Кроме того, здесь добавлено действие - встроенная команда awk - print, которая вывыодит передаенное ей значение. Ей передается значение $3 - это значение 3-го столбца. В нашем случае 1-й столбец представляет имя, 2-й столбец - возраст и 3-й - компанию. Специальное значение - $0 означает всю строку.

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

eugene@Eugene:~$ awk -F : '{print $3}' users.txt
Microsoft
Google
Jetbrains
Microsoft
Google
-
Apple

Поскольку awk может ссылаться на определенные поля, можно также сравнивать поля друг с другом. Для этой цели доступны следующие операторы:

  • ==: Равно (ищет поле с тем же значением)

  • !=: Не равно

  • <: меньше, чем

  • <=: меньше или равно

  • >: Больше, чем

  • >=: больше или равно

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

eugene@Eugene:~$ awk -F : '$2 > 30 {print $1}' users.txt
Tom
Bob
Alice
Tomas
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850