Команда awk — это мощный метод для обработки или анализа текстовых файлов. В частности, он анализирует файлы данных, которые организованы по строкам (строкам) и столбцам. Простые команды awk могут быть запущены из командной строки . Более сложные задачи должны быть записаны в виде awk-программ (называемых awk-скриптами) в файл.
Основы AWK
Основной формат команды awk выглядит следующим образом:
awk 'pattern {action}' input-file> output-file
Это означает: взять каждую строку входного файла; если строка содержит шаблон, примените действие к строке и запишите полученную строку в выходной файл. Если шаблон не указан, действие применяется ко всем строкам. Например:
awk '{print $ 5}' table1.txt> output1.txt
Вышеприведенный оператор берет элемент 5-го столбца каждой строки и записывает его в виде строки в выходной файл «output.txt». Переменная «$ 4» относится к четвертому столбцу. Точно так же вы можете получить доступ к первому, второму и третьему столбцам, используя $ 1, $ 2, $ 3 и т. Д. По умолчанию предполагается, что столбцы разделены пробелами или табуляцией (так называемый пробел). Итак, если входной файл «table1.txt» содержит эти строки:
1, Джастин Тимберлейк, Название 545, Цена 7,30 $
2, Тейлор Свифт, Название 723, Цена 7,90 $
3, Мик Джаггер, Название 610, Цена 7,90 $
4, Леди Гага, Название 118, Цена 7,30 $
5, Джонни Кэш, Название 482, Цена 6,50 $
6, Элвис Пресли, Название 335, Цена 7,30 доллара США
7, Джон Леннон, Название 271, Цена 7,90 доллара США
8, Майкл Джексон, Название 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
Список операторов внутри фигурных скобок (‘{‘, ‘}’) называется блоком. Если вы поместите условное выражение перед блоком, оператор внутри блока будет выполнен, только если условие истинно.
awk '$ 7 == "\ $ 7.30" {print $ 3}' table1.txt
В этом случае условие равно $ 7 == «\ $ 7.30», что означает, что элемент в столбце 7 равен $ 7.30. Обратная косая черта перед знаком доллара используется для предотвращения интерпретации системой $ 7 как переменной и вместо этого буквально воспринимает знак доллара.
Таким образом, этот оператор awk выводит элемент в 3-м столбце каждой строки, который имеет «7,30» в столбце 7.
Вы также можете использовать регулярные выражения в качестве условия. Например:
awk '/ 30 / {print $ 3}' table1.txt
Строка между двумя слешами (‘/’) является регулярным выражением. В данном случае это просто строка «30». Это означает, что если строка содержит строку «30», система печатает элемент в 3-м столбце этой строки. Выход в приведенном выше примере будет выглядеть так :
Тимберлейк,
Гага,
Пресли,
Выполнять расчеты в AWK
Если элементы таблицы являются числами, awk может выполнять вычисления на них, как в этом примере:
awk '{print ($ 2 * $ 3) + $ 7}'
Помимо переменных, которые обращаются к элементам текущей строки ($ 1, $ 2 и т. Д.), Есть переменная $ 0, которая относится к полной строке (строке), и переменная NF, которая содержит количество полей.
Вы также можете определить новые переменные, как в этом примере:
awk '{sum = 0; для (col = 1; col <= NF; col ++) sum + = $ col; печатать сумму; }»
Это вычисляет и печатает сумму всех элементов каждой строки.
Утверждения Awk часто сочетаются с командами sed .