Команда awk - это мощный метод обработки или анализа текстовых файлов, в частности файлов данных, которые организованы строками (строками) и столбцами.
просто AWK команды могут быть запущены из командной строки. Более сложные задачи должны быть записаны в виде awk-программ (так называемых awk-скриптов) в файл.
Основной формат команды awk выглядит следующим образом:
awk 'pattern {действие}' input-file> output-file
Это означает: взять каждую строку входного файла; если строка содержит шаблон, примените действие к строке и напишите результирующую строку в выходной файл. Если шаблон опущен, действие применяется ко всей строке. Например: awk '{print $ 5}' table1.txt> output1.txt Этот оператор принимает элемент 5-го столбца каждой строки и записывает его как строку в выходной файл «output.txt». Переменная «$ 4» относится ко второму столбцу. Аналогичным образом вы можете получить доступ к первому, второму и третьему столбцам с помощью $ 1, $ 2, $ 3 и т. Д. По умолчанию предполагается, что столбцы разделены пробелами или вкладками (так называемое пустое пространство). Итак, если входной файл «table1.txt» содержит следующие строки: 1, Джастин Тимберлейк, Название 545, Цена $ 7.302, Тейлор Свифт, Титул 723, Цена: $ 7.903, Мик Джаггер, Титул 610, Цена: $ 7.904, Леди Гага, Название 118, Цена $ 7.305, Джонни Кэш, Название 482, Цена $ 6,506, Элвис Пресли, Название 335, Цена $ 7.307, Джон Леннон, Название 271, Цена $ 7,908, Майкл Джексон, Название 373, Цена $ 5,50 Затем команда будет записывать следующие строки в выходной файл «output1.txt»: 545,723,610,118,482,335,271,373, Если разделитель столбцов - это нечто иное, чем пробелы или табы, например запятая, вы можете указать это в инструкции awk следующим образом: awk -F, '{print $ 3}' table1.txt> output1.txt Это выберет элемент из столбца 3 каждой строки, если столбцы будут разделены запятой. Поэтому выход в этом случае был бы: Заголовок 545 Заголовок 723 Заголовок 610 Название 118 Заголовок 482 Название 335 Заголовок 271 Название 373 Список операторов внутри фигурных скобок ('{', '}') называется блоком. Если вы помещаете условное выражение перед блоком, оператор внутри блока будет выполнен, только если условие истинно. awk '$ 7 == " $ 7.30" {print $ 3}' table1.txt В этом случае условие равно $ 7 == " $ 7.30", что означает, что элемент в столбце 7 равен $ 7.30. Обратная косая черта перед значком доллара используется для того, чтобы система не интерпретировала $ 7 как переменную и вместо этого воспринимала знак доллара буквально. Таким образом, этот оператор awk выдает элемент в третьем столбце каждой строки, который имеет «7,30» в столбце 7. Вы также можете использовать регулярные выражения как условие. Например: awk '/ 30 / {print $ 3}' table1.txt Строка между двумя слэшами ('/') является регулярным выражением. В этом случае это всего лишь строка «30.», Это означает, что если строка содержит строку «30», система выдает элемент в третьем столбце этой строки. Результатом в приведенном выше примере будет: Timberlake, Гага, Presley, Если элементы таблицы являются числами, awk может выполнять вычисления на них, как в этом примере: awk '{print ($ 2 * $ 3) + $ 7}' Помимо переменных, которые обращаются к элементам текущей строки ($ 1, $ 2 и т. Д.), Существует переменная $ 0, которая ссылается на полную строку (строку) и переменную NF, которая соответствует числу полей. Вы также можете определить новые переменные, как в этом примере: awk '{sum = 0; for (col = 1; col <= NF; col ++) sum + = $ col; печать суммы; }» Это вычисляет и печатает сумму всех элементов каждой строки. Операторы Awk часто сочетаются с командами sed.