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.12. Действие

В выражении шаблон-действие, "действие" определяет то, что нужно выполнить с вводными записями, которые отобраны по шаблону. Достаточно часто "действие" - это печать каких-либо выражений, но также может быть комбинацией одного или более выражений.

Встроенные переменные

В табл. 23 приведены встроенные переменные, которые поддерживает awk.

Таблица 23
Встроенные переменные

Переменная Значение Умолчание
ARGC Число аргументов команд ной строки -
ARGV Массив аргументовной строки командной строки -
FILENAME Имя текущего вводного файла -
FNR Номер записи в текущем файле -
FS Поле разделителя вводного файла пробел и/или табуляция
FN Число полей в текущей записи -
NR Число считанных на данный момент записей -
OFMT Выводной формат для цифр %.6g
OFS Разделитель поля выводного файла пробел
ORS Разделитель записи выводного поля символ новой строки
RS Разделитель записи вводного файла то же
RSTART Индекс первого выбранного символа при помощи match() -
RLENGTH Длина строки, выбранной при помощи match() -
SUBSEP Нижний разделитель "\034"

10.12.1. Арифметические действия

В качестве действия могут использоваться уловные арифметические выражения, чтобы вычислить числовые значения. В качестве простого примера предположим, что нужно напечатать плотность населения для каждой страны в файле countries. Так как второе поле - это площадь в тысячах квадратных километров, а третье поле - это население в миллионах, то выражение:

	100 * $3 / $2
дает плотность населения на 1 квадратный километр.

Программа:

      {print "%10s %6.1f\n", $1,
        1000 *$3 / $2}
печатает название страны и плотность населения:
             USSR    30.3
           Canada     6.2
            China   234.6
              USA    60.6
           Brazil    35.3
        Australia     4.7
            India   502.0
        Argentina    24.3
            Sudan    19.6
          Algeria    19.6

Арифметические действия выполняются с плавающей точкой. Арифметическими операторами являются:

	+, -, *, /, %, ^

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

	v = e 
где v - переменная или имя поля;
e - выражение.

Например, чтобы вычислить число стран континента "Asia" и общее количество населения, вы должны написать:

        $4 == "Asia"  { pop = pop = $3; n = n + 1 }
        END           { print "population of", n,
              "Asian countries in million is", pop }

Относительно файла countries эта программа выдает результат:

        population of 3 Asian countries in
        million is 1765

Действие, связанное с шаблоном $4 == "Asia" выполняет 2 назначения, одно - накопление населения и другое - подсчет стран.

Назначения в предыдущей программе могут быть записаны более сжато с использованием операторов "+=" и "++":

	$4 == "Asia" {pop += $3; ++n}

Оператор "+=" заимствован из языка программирования Си, следовательно:

	pop += $3
аналогично:
	pop = pop + $3
но оператор "+=" короче и работает быстрее.

Операторами назначения являются:

	+=, -=, *=, /=, %=, ^=

Операторами приращения являются "++" и "--". Как и в языке Си они могут использоваться как префиксные (++x) или постфиксные (x++) операторы. Если x равно 1, то "i = ++x" увеличивает x, затем устанавливает i равным 2, в то время как "i = x++" устанавливает i равным 1, затем увеличивает x. Аналогичная интерпретация для префиксного и постфиксного операторов "--".

Операторы присвоения, увеличения и уменьшения могут использоваться в арифметических выражениях.

Мы используем установки по умолчанию в следующих программах, которые находят страны с наибольшим населением:

        maxpop < $3 { maxpop = $3; country = $1 }
        END         { print country, maxpop }

Обратите внимание, что эта программа будет некорректна, если значение $3 будет отрицательным.

В табл. 24 перечислены встроенные арифметические функции.

Таблица 24
Встроенные арифметические функции

Функция Возвращаемое значение
atan2(y,x) Арктангенс y/x в пределах от "-пи" до "пи"
cos(x) Косинус x
exp(x) Экспоненциальная функция x
int(x) Целая часть x с усеченными лидирующими нулями
log(x) Натуральный логарифм x
rang() Случайное число между 0 и 1
sin(x) Синус x
sqrt(x) Квадрат x
srand(x) x - новое начальное значение для rand()

Функция rand() возвращает псевдослучайное число с плавающей точкой в диапазоне от 0 до 1, а srand(x) может быть использовано для установки нового начального значения генерирующей программы. Если srand() не имеет аргументов, то начальное значение производится из времени дня.

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

Бесплатный конструктор сайтов и 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
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...