$ awk 'BEGIN {print index("Bunny","ny")}' grade.txt
4
Функция length()
Функция length() возвращает длину переданного ей текстового аргумента. В показанном ниже примере производится поиск информации об ученике с номером 4842, а затем определяется длина имени ученика:
$ awk '$3=4842 {print length($1)" "$1}' grade.txt
7 J.Troll
Следующая команда демонстрирует применение утилиты awk для вычисления длины текстовой строки:
$ awk 'BEGIN {print length("A FEW GOOD MEN")}'
14
Функция match()
Функция match() позволяет проверить, содержит ли строка заданную подстроку. Последняя может быть представлена как литералом в двойных кавычках, так и регулярным выражением. Если поиск прошел успешно, возвращается число, определяющее позицию, с которой начинается вхождение подстроки в искомую строку. В случае неудачи возвращается ноль. Следующая команда проверяет, содержит ли имя ученика с номером 48317 символ 'u':
$ awk '$3=48317 {print match ($1, "u"), $1} ' grade.txt
4 J. Lulu
Функция split()
Функция split() преобразует переданную ей строку в массив и возвращает число элементов в полученном массиве. В следующем примере заданная строка разбивается на три элемента, которые помещаются в массив myarray. Разделителем элементов в данном случае является символ '#'.
$ awk 'BEGIN {print split("123#456#678", myarray,"#"))'
3
Массив myarray будет иметь такую структуру:
mуarray[1]="123" myarray[2]="4 56"
myarray[3]="678"
Функция sub()
Функция sub() применяется для поиска строки, соответствующей заданному шаблону, и ее замены при первом появлении. В этом состоит отличие данной функции от функции gsub(), которая находит все случаи вхождения подстроки в строку, производя соответствующее число замен. Приведенная ниже команда находит запись ученика J. Troll и меняет его рейтинг с 26 на 29 (поле 6), при этом значение поля 7 (тоже 26) остается неизменным:
$ awk '$1=="J. Troll" {sub(26,29,$0) )' grade.txt
J. Troll 07/99 4842 Brown-3 12 29 26
Функция substr()
Функция substr() возвращает указанную часть строки. Вам нужно задать позицию, с которой начинается вхождение подстроки в искомую строку, и длину подстроки. Рассмотрим пример:
$ awk '$1=="L. Tansley" {print substr($1,1,5))' grade.txt
L. Tan
Эта команда возвращает из строки "L. Tansley" подстроку, начинающуюся с первого символа и занимающую пять символов.
Если значение третьего аргумента значительно превышает реальную длину строки, функция substr () возвращает все символы строки, начиная с указанной позиции:
$ awk '$1=="L. Tansley" {print substr ($1,3, 99) ) ' grade.txt
Tansley
То же самое происходит, когда третий аргумент вообще не указан. Например, следующая команда формирует список фамилий учеников:
$ awk '{print substr($1,3)}' grade.txt
Tansley
Lulu
Bunny
Troll
Tansley
Передача строк из интерпретатора shell утилите awk
Очень часто утилита awk получает входные данные не из файла, а по каналу от других команд. Рассмотрим несколько примеров обработки строк, поступающих из канала.
В первом примере команда echo передает строку "Stand‑by" утилите awk, которая вычисляет ее длину:
$ echo "Stand‑by" | awk '{print length($0)}'
8
Во втором примере утилита awk получает строку с именем файла и возвращает имя файла без расширения:
$ echo "mydoc.txt" | awk '{print substr($STR,1,5)}'
mydoc
Следующая команда возвращает только расширение файла:
$ echo "mydoc.txt" | awk '{print substr($STR,7)}'
txt
При работе со строками и регулярными выражениями нередки случаи включения в шаблон поиска непечатаемых символов (таких как символ новой строки либо табуляции) или же символов со специальным значением в утилите awk (любой из метасимволов). Такие символы создаются с помощью управляющих Escape–последовательностей, признаком которых является обратная косая черта в начале.
Например, шаблон поиска открывающей фигурной скобки выглядит так:
/\|/
В табл. 9.5 перечислены Escape–последовательности, распознаваемые утилитой awk.
Таблица 9.5. Escape–последовательности утилиты awk