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