Команды, синтаксис и примеры
Команда 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 $
Lady Gaga, Название 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-м столбце этой строки. Вывод в приведенном выше примере будет:
Тимберлейк,
Гага,
Пресли,
Если элементы таблицы являются числами, awk может выполнять вычисления на них, как в этом примере:
awk '{print ($ 2 * $ 3) + $ 7}'
Помимо переменных, которые обращаются к элементам текущей строки ($ 1, $ 2 и т. Д.), Есть переменная $ 0, которая относится к полной строке (строке), и переменная NF, которая содержит количество полей.
Вы также можете определить новые переменные, как в этом примере:
awk '{sum = 0; для (col = 1; col <= NF; col ++) sum + = $ col; печать суммы; } '
Это вычисляет и печатает сумму всех элементов каждой строки.
Утверждения Awk часто сочетаются с командами sed.