
В этом базовом руководстве вы узнаете самые основы команды
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.txt
1 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 и управления текстовыми данными.Благодарю за чтение и успехов вам в обучении!

