Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Скидка до 20% на услуги дата-центра. Аренда серверной стойки. Colocation от 1U!

Миграция в облако #SotelCloud. Виртуальный сервер в облаке. Выбрать конфигурацию на сайте!

Виртуальная АТС для вашего бизнеса. Приветственные бонусы для новых клиентов!

Виртуальные VPS серверы в РФ и ЕС

Dedicated серверы в РФ и ЕС

По промокоду CITFORUM скидка 30% на заказ VPS\VDS

VPS/VDS серверы. 30 локаций на выбор

Серверы VPS/VDS с большим диском

Хорошие условия для реселлеров

4VPS.SU - VPS в 17-ти странах

2Gbit/s безлимит

Современное железо!

10.13. Строки и строковые функции

Строка констант - это последовательность символов, заключенная в двойные кавычки, как например, "abc", "hello, everyone".Строкаконстант может содержать последовательности escape языка программирования Си для специальных символов.

Строковые выражения создаются путем слияния констант, переменных, имен полей, элементов массива, функций и других выражений.

Программа:

	{ print NR ":" $0 }
печатает перед каждой записью ее номер и двоеточие без пробела. Три строки: номер записи, двоеточие и запись сливаются и результирующая строка печатается.

В табл. 25 приведены встроенные строковые функции, поддерживаемые awk. В этой таблице r представляет собой регулярное выражение (либо как строка, либо как /r/), s и t - строковые выражения, n и p - целые числа.

Таблица 25
Встроенные строковые функции awk

Функция Описание
gsub(r, s) Глобальная замена s на r в текущей записи; возвращает количество земененых символов
gsub(r,s, t) Глобальная замена s на r в строке t, возвращает количество замененных символов
index(s,t) Возвращает позицию t в s: 0 - если t нет в s
length(s) Возвращает длину s
matgch(s,r) Возвращает позицию s, в которой встречается r; 0 - если r не встретилось
split(s,a) Разделяет s на массив a по FS; возвращает число полей
split(s,a,r) Разделяет s на массив a по r; возвращает число полей
sprintf(fmt,expr-list)Возвращает expr-list, отформатированный в соответствии с форматом строки fmt
sub(r,s) Замещает s на первое r в текущей записи, возвращает количество замен
sub(r,s,t) Заменяет s на первое r в строке t, возвращает количество замен
substr(s,p) Возвращает индекс s, начиная с позиции p
substr(s,p,n)Возвращает подсказку s длиной n, начиная с позиции p

Функции sub и gsub сформированы после команды замены в текстовом радакторе ed. Функция gsub(r,s,t) заменяет успешное появление подстрок, найденных при помощи регулярного выражения r с заменой строки s в целевой строке t. Функция gsub(r,s) является синонимом gsub(r,s,$0). Например, программа:

	{ gsub(/USA/, "United States"); print }
преобразует ввод, меняя появление "USA" на "Unites States". Функция sub подобна ей, за исключением того, что она заменяет первую найденную подстроку в целевой строке.

Функция index(s,t) возвращает левую крайнюю позицию, с которой строка t начинается в s. Первый символ в строке начинается с позиции 1. Например,

	index("banana", "an")
возвращает 2.

Функция length возвращает число символов в строке; так:

	{ print length($0), $0 }
печатает каждую запись, а перед ней ее длину. ($0 не включает в вводную запись разделитель). Программа:
        length($1) > max { max = length($1); name = $1 }
        END              { print name }
применительно к файлу countries распечатывает наибольшее имя страны:
	Australia 

Функция match(s,r) возвращает позицию в строке s, в которой появилось регулярное выражение r, либо 0, если оно не найдено. Эта функция также устанавливает две встроенные переменные RSTART и RLENGTH. RSTART принимает значение начальной позиции, найденной в строке, это значение равно возвращаемому значению. RLENGTH принимает значение длины найденной строки. (Если строка не найдена, то RSTART равно 0, а RLENGTH равно -1). Например, следующая программа ищет появление буквы i и за ней сразу или через один символ следует буква a:

           { if (match($0, /i.?a/))
                { print RSTART, RLENGTH, $0 }
Относительно файла countries получим следующий вывод:
        17 2 USSR 8650     262     Asia
        26 3 Canada         3852     24      North America
        3 3 China 3692     866     Asia
        24 3 USA  3615     219     North America
        27 3 Brazil         3286     116     South America
        8 2 Australia       2968     14      Australia
        4 2 India 1269     637     Asia
        7 3 Argentina       1072     26      South America
        17 3 Sudan          968      19      Africa
        6 2 Algeria         920      18      Africa

Функция sprintf(format, expr1, expr2, ..., exprn) возвращает (без печати) строку, содержащую expr1, expr2, ..., exprn, отформатированную в соответствии со спецификацией printf в строке format. Выражение:

	x = sprintf("%10s %6d", $1, $2)
присваивает x строку, полученную при форматировании $1 и $2 как 10-символьных строк и десятичное число в поле шириной как минимум 6 знаков.

Функция substr(s,p,n) возвращает подстроку s, которая начинается с позиции p и имеет длину не менее n символов. Если используется функция substr(s,p), то подстрока направляется в конец s, так что она состоит из индекса s, начинающегося с позиции p. Например, мы можем сократить имена стран в файле countries до трех символов, вызвав программу:

	{ $1 = substr($1, 1, 3); print }
В итоге получим:
        USS 8650 262 Asia
        Can 3852 24 North America
        Chi 3692 866 Asia
        USA 3615 219 North America
        Bra 3286 116 South America
        Aus 2968 14 Australia
        Ind 1269 637 Asia
        Arg 1072 26 South America
        Sud 968 19 Africa
        Alg 920 18 Africa

Обратите внимание, что установка $1 в программе приводит к тому, что awk заново вычисляет $0 и, кроме того, поля разделяются пробелами (значение по умолчанию для OFS), но не табуляцией.

Чтобы слить строки, надо просто записать их одна за другой. Например, для файла countries:

        { s = s substr($1, 1, 3) " " }
        END { print s }
печатает:
        USS Can Chi USA Bra Aus Ind Arg Sud Alg

Назад | Содержание | Вперед

Бесплатный конструктор сайтов и Landing Page

Хостинг с DDoS защитой от 2.5$ + Бесплатный SSL и Домен

SSD VPS в Нидерландах под различные задачи от 2.6$

✅ Дешевый VPS-хостинг на AMD EPYC: 1vCore, 3GB DDR4, 15GB NVMe всего за €3,50!

🔥 Anti-DDoS защита 12 Тбит/с!

VPS в России, Европе и США

Бесплатная поддержка и администрирование

Оплата российскими и международными картами

🔥 VPS до 5.7 ГГц под любые задачи с AntiDDoS в 7 локациях

💸 Гифткод CITFORUM (250р на баланс) и попробуйте уже сейчас!

🛒 Скидка 15% на первый платеж (в течение 24ч)

Новости мира IT:

Архив новостей

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 7861149
Пресс-релизы — pr@citforum.ru
Обратная связь
Информация для авторов
Rambler's Top100 TopList This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2019 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...