Как писать команды и скрипты 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, Lady Gaga, Title 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 '$ 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-м столбце этой строки. Вывод в приведенном выше примере будет:

Timberlake,
Гага,
Presley,

Если элементы таблицы являются числами, awk может выполнять вычисления на них, как в этом примере:

awk '{print ($ 2 * $ 3) + $ 7}'

Помимо переменных, которые обращаются к элементам текущей строки ($ 1, $ 2 и т. Д.), Есть переменная $ 0, которая относится к полной строке (строке), и переменная NF, которая содержит количество полей.

Вы также можете определить новые переменные, как в этом примере:

awk '{sum = 0; для (col = 1; col<=NF; col++) sum += $col; print sum; }'

Это вычисляет и печатает сумму всех элементов каждой строки.

Утверждения Awk часто сочетаются с командами sed.

Ссылка на основную публикацию