AWK - основные примеры
В этой главе описывается несколько полезных команд AWK и соответствующие примеры. Рассмотрим текстовый файлmarks.txt для обработки со следующим содержанием -
1) Amit Physics 80
2) Rahul Maths 90
3) Shyam Biology 87
4) Kedar English 85
5) Hari History 89
Печать столбца или поля
Вы можете указать AWK печатать только определенные столбцы из поля ввода. Следующий пример демонстрирует это -
пример
[jerry]$ awk '{print $3 "\t" $4}' marks.txt
Выполнив этот код, вы получите следующий результат -
Выход
Physics 80
Maths 90
Biology 87
English 85
History 89
В файле marks.txt, третий столбец содержит название темы, а четвертый столбец - оценки, полученные по определенной теме. Давайте распечатаем эти два столбца с помощью команды печати AWK. В приведенном выше примере$3 and $4 представляют третье и четвертое поля соответственно из входной записи.
Печать всех строк
По умолчанию AWK печатает все строки, соответствующие шаблону.
пример
[jerry]$ awk '/a/ {print $0}' marks.txt
Выполнив этот код, вы получите следующий результат -
Выход
2) Rahul Maths 90
3) Shyam Biology 87
4) Kedar English 85
5) Hari History 89
В приведенном выше примере мы ищем шаблон формы a. Когда сопоставление с образцом выполнено успешно, выполняется команда из основного блока. При отсутствии блока тела - по умолчанию выполняется действие печати записи. Следовательно, следующая команда дает тот же результат -
пример
[jerry]$ awk '/a/' marks.txt
Печать столбцов по шаблону
При успешном сопоставлении с образцом AWK по умолчанию печатает всю запись. Но вы можете указать AWK печатать только определенные поля. Например, в следующем примере третье и четвертое поля печатаются при успешном сопоставлении с шаблоном.
пример
[jerry]$ awk '/a/ {print $3 "\t" $4}' marks.txt
Выполнив этот код, вы получите следующий результат -
Выход
Maths 90
Biology 87
English 85
History 89
Печать столбца в любом порядке
Вы можете печатать столбцы в любом порядке. Например, в следующем примере печатается четвертый столбец, за которым следует третий столбец.
пример
[jerry]$ awk '/a/ {print $4 "\t" $3}' marks.txt
Выполнив приведенный выше код, вы получите следующий результат -
Выход
90 Maths
87 Biology
85 English
89 History
Подсчет и печать согласованного шаблона
Давайте посмотрим на пример, где вы можете подсчитать и распечатать количество строк, для которых совпадение с шаблоном было успешным.
пример
[jerry]$ awk '/a/{++cnt} END {print "Count = ", cnt}' marks.txt
Выполнив этот код, вы получите следующий результат -
Выход
Count = 4
В этом примере мы увеличиваем значение счетчика при успешном совпадении с шаблоном и печатаем это значение в блоке END. Обратите внимание, что, в отличие от других языков программирования, нет необходимости объявлять переменную перед ее использованием.
Печать строк, содержащих более 18 символов
Будем печатать только те строки, которые содержат более 18 символов.
пример
[jerry]$ awk 'length($0) > 18' marks.txt
Выполнив этот код, вы получите следующий результат -
Выход
3) Shyam Biology 87
4) Kedar English 85
AWK предоставляет встроенный length функция, возвращающая длину строки. $0переменная хранит всю строку, и при отсутствии блока тела выполняется действие по умолчанию, то есть действие печати. Следовательно, если строка содержит более 18 символов, тогда сравнение будет истинным и строка будет напечатана.