
В этом базовом руководстве вы узнаете самые основы команды
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, содержащий данные, разделённые по столбцам.
Выглядеть этот файл может так:
firstName 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В приведённом примере мы видим по одному столбцу для
firstName, lastName, age, city и ID.В любой момент можно просмотреть вывод содержимого вашего файла, выполнив
cat text_file, где text_file представляет имя файла.Вывод всего содержимого файла
Для вывода всего содержимого файла в качестве действия в фигурных скобках нужно указать
print $0.Сработает эта команда аналогично ранее упомянутой
cat.awk '{print $0}' information.txtВывод:
firstName 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.txt1 firstName 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Вывод:
firstName city
Thomas Rio
Omega Ontario
Wood Lisbon
Giorgos London
Timmy BerlinЗдесь
$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 Символ
! используется в качестве приставки «НЕ», а значит, в этом случае будут выбраны строки, которые не оканчиваются на 0.firstName lastName age city ID
Wood Tinker 54 Lisbon N/A
Timmy Turner 32 Berlin N/A
Использование регулярных выражений
Для вывода слов, содержащих определённые буквы, а также слов, соответствующих указанному шаблону, мы снова используем прямые слэши.
К примеру, если нас интересуют слова, содержащие
io, мы пишем:awk ' /io/{print $0}' information.txtВывод:
Thomas Shelby 30 Rio 400
Omega Night 45 Ontario 600
Giorgos Georgiou 35 London 300Мы получили строки, в которых содержатся слова, содержащие
io.Теперь предположим, что в файле есть дополнительный столбец
department:firstName 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, нужно указать искомую строку между //:awk '/IT/' information.txtВывод:
Thomas Shelby 30 Rio 400 IT
Wood Tinker 54 Lisbon N/A ITА что, если мы хотим увидеть только имена и фамилии сотрудников из
IT?Тогда можно указать столбец так:
awk '/IT/{print $1, $2}' information.txtВывод:
Thomas Shelby
Wood TinkerВ этом случае отобразятся только первый и второй столбцы строк, содержащих
IT.При поиске слов, содержащих конкретный шаблон, бывают случаи, когда требуется использовать экранирующий символ:
awk '/N\/A$/' information.txtВывод:
Wood Tinker 54 Lisbon N/A
Timmy Turner 32 Berlin N/AЯ хотела найти строки, оканчивающиеся на
N/A. Поэтому при указании критериев поиска в ' // ', как это показывалось выше, мне пришлось использовать между N/A символ перехода \. В противном случае возникла бы ошибка.Использование операторов сравнения
Если вы, предположим, захотите найти всю информацию о сотрудниках в возрасте до 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 и управления текстовыми данными.Благодарю за чтение и успехов вам в обучении!

