программирование

Операторы управления потоком

awk поддерживает операторы if-else, while, do-while аналогично языку программирования Си.

Синтаксис оператора if:

	if (выражение) оператор_1 else оператор_2

"выражение" является условным и не имеет ограничений. Оно
может включать операторы отношений:

	<, <=, >, >=, ==, !=

регулярные выражения:

	~, !~

логические операторы:

	||, &&, !

операторы слияния и круглые скобки для группирования.

В операторе if awk сначала вычисляет "выражение". Если оно ...

Номер или строка

Переменные, поля и выражения могут иметь цифровое или строчное значение в соответствии с контекстом. Например, в контексте выражения, подобного следующему:

	pop += $3

pop и $3 должны трактоваться как цифровые.

В контексте строки, подобной:

	print $1 ":" $2

строки $1 и $2 сливаются.

В операторах присвоения "v = e" или "op = e" тип "v" станет таким же, как и у "e". В двухсмысленном контексте:

	$1 == $2

тип сравнения зависит от того, являются поля цифровыми или ...

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

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

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

Программа:

	{ print NR ":" $0 }

печатает перед каждой записью ее номер и двоеточие без пробела. Три строки: номер записи, двоеточие и запись ...

Действие

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

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

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

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

...

Переменная Значение Умолчание
ARGC

Область шаблона

Область шаблона состоит из двух шаблонов, разделенных запятой:

	pat1, pat2 {...}

В этом случае действие выполняется для каждой строки, расположенной между pat1 и pat2 (включительно). Например, шаблон:

	/Canada/, /Brazil/

ищет строки со словом "Canada" до строки со словом "Brazil"

        Canada      3852     24      North America
        China       3692     866     Asia
        USA         3615     219     North America
        Brazil      3286     116     South America

Также, если FNR - число ...

Регулярные выражения

awk обеспечивает более мощные шаблоны для поиска строки символов, чем сравнение. Такие шаблоны называются регулярными выражениями. Простейшим регулярным выражением является строка символов, обрамленная знаками "/". Например:

	/Asia/

Эта программа печатает все записи, которые содержат подстроку Asia (запись, содержащая Asia как часть длинной строки, подобной Asian или Pan-Asiatic, также печатается).

Чтобы ограничить поиск только для специального поля, вы можете использовать операторы ~(входит) и !~(не входит). ...

Выражения отношения

В качестве шаблона может использоваться любое выражение, вызывающее сравнение между строками символов или цифр. awk имеет 6 операторов сравнения и два регулярных выражения ~ и !~. В табл. 21 перечислены все операторы и их значение.

Таблица 21
Значения операторов

Оператор Значение
< Меньше чем
<= Меньше или равно
== Равно
...

Шаблоны

В выражении шаблон-действие, шаблон служит для выбора записей, для которых выполняется соответствующее действие.

10.7.1. Шаблоны BEGIN и END

BEGIN используется для получения управления перед считыванием первой вводной строки, так что любое действие для шаблона BEGIN выполняется один раз до того, как команда awk начинает считывать первую запись. END используется для получения управления после считывания последней вводной строки.

Следующая awk-программа использует BEGIN для установки в качестве разделителя символа табуляции (\t) и создания ...

Сообщения об ошибках

Если вы сделаете ошибку в программе awk, то получите сообщение об ошибке. Например, если вы попытаетесь запустить программу:

	$3 < 200 { print ($1}

то получите сообщение об ошибке:

        awk: syntax error at source line 1
        contex is
             $3 < 200 {print >>>$1}<<<
        awk: illegal statement at source line 1
             1 extra (

Некоторые ошибки могут быть обнаружены во время работы программы. Например, если вы попытаетесь поделить на 0 (ноль), то awk остановит обработку и распечатает номер ...

Примеры некоторых полезных программ

awk может использоваться для написания больших программ некоторой сложности. В нее могут входить некоторые короткие программы, которые для вас являются полезными и поучительными. Приведем некоторые из них.

Напечатать последнее поле каждой вводной строки:

	{print $NF}

Напечатать 10-ю вводную строку:

	NF == 10

Напечатать последнюю вводную строку:

	{line = $0}
	END {print line}

Напечатать строки, которые не имеют 4-го поля:

Смотрите подробности зажим алюминиевый, медный для тросов, канатов talurit тут.

	NF != 4 {print $0, "не имеют 4-го поля" }

Напечатать вводные ...

Ленты новостей