$ 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

<p><emphasis><strong>9.2.11. Escape–последовательности</strong></emphasis></p>

При работе со строками и регулярными выражениями нередки случаи включения в шаблон поиска непечатаемых символов (таких как символ новой строки либо табуляции) или же символов со специальным значением в утилите awk (любой из метасимволов). Такие символы создаются с помощью управляющих Escape–последовательностей, признаком которых является обратная косая черта в начале.

Например, шаблон поиска открывающей фигурной скобки выглядит так:

/\|/

В табл. 9.5 перечислены Escape–последовательности, распознаваемые утилитой awk.

Таблица 9.5. Escape–последовательности утилиты awk

Перейти на страницу:

Похожие книги