Перейти на главную   
  helloworld.ru - документация и книги по программированию  
helloworld.ru - документация и книги по программированию
    главная     хостинг    
Поиск по сайту:  
Смотрите также
Языки программирования
C#
MS Visual C++
Borland C++
C++ Builder
Visual Basic
Quick Basic
Turbo Pascal
Delphi
JavaScript
Java
PHP
Perl
Assembler
AutoLisp
Fortran
Python
1C

Интернет-технологии
HTML
VRML
HTTP
CGI
FTP
Proxy
DNS
протоколы TCP/IP
Apache

Web-дизайн
HTML
Дизайн
VRML
PhotoShop
Cookie
CGI
SSI
CSS
ASP
PHP
Perl

Программирование игр
DirectDraw
DirectSound
Direct3D
OpenGL
3D-графика
Графика под DOS

Алгоритмы
Численные методы
Обработка данных

Сис. программирование
Драйверы

Базы данных
MySQL
SQL

Другое

Хостинг


Друзья
demaker.ru
Реклама

Лучший хостинг. Аренда серверов




helloworld.ru

10.27. Итоговое краткое описание awk

Командная строка

        awk programm filenames
        awk -f programm-file filenames
        awk -Fs sets field separator to string s
        awk -Ft sets separator to tab

Шаблоны

        BEGIN
        END
        /regular expression/
        relational expression
        pattern && pattern
        pattern || pattern
        (pattern)
        !pattern
        pattern, pattern

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

        if (expr) statement [else statement]
        if (subscript in array) statement [else statement]
        while (expr) statement
        for (expr; expr; expr) statement
        for (var in array) statement
        do statement while statement
        break
        cintinue
        next
        exit [expr]
        return [expr]

Ввод-вывод

close (filename) закрыть файл
getline установить $0 из следующей вводной записи; установить NF, NR, FNR
getline <file установить $0 из следующей записи файла; установить NF
getline var установить var из следующей вводной записи; установить NR, FNR
getline var <file установить var из следующей записи файла
print распечатать текущую запись
print expr-list распечатать выражение
print expr-list >file печать выражений в файл
printf fmt, expr-list отформатировать и распечатать
printf fmt, expr-list >file отформатировать и распечатать в файл
system (cmd-line) выполнить команду cmd-line, возвратить состояние

В print и printf >>file добавляется в file и |command - записывает в канал.

Функции

        func name(parameter list) { statement }
        function  name(parameter list) { statement }
        function-name(expr, expr, ...)

Функции строки

gsub(r,s,t) заменить строку s для каждого найденного регулярного выражения r в строке t; возвращает количество замен; если t опущено, то используется $0
index(s,t) возвращает индекс строки t в строке s, или 0, если нет вхождений строки t
length(s) возвращает длину строки s
match(s,r) возвращает позицию s, в которой встретилось регулярное выражение r; возвращает 0, если r не найдено
split(s,a,r) разбить строку s в массив a по регулярному выражению r; возвращает количество полей; если r опущено, то используется значение FS
sprints(fmt,expr-list) печатает expr-list в соответствии с fmt, возвращает результирующую строку
sub(r,s,t) аналогично gsub, за исключением того, что заменяется только первая найденная подстрока
substr(s,i,n) возвращает подстроку n, начинающуюся с i; если n опущено, то используется остаток s

Арифметические функции

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()

Операторы

= += -= *= /= %= ^= присвоение
?: условное выражение
|| логическое OR
&& логическое AND
~ !~ поиск регулярного выражения; отрицательный поиск
< <= > >= != == отношения
blank конкатенация строк
+ - сложить, вычесть
* / % умножить, разделить, режим
+ - ! унарный плюс, унарный минус, логическое отрицание
^ показательная функция ( ** является синонимом)
++ -- приращение, отрицательное приращение
$ поле

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

с поиск на совпадение с немета-символом "c"
поиск буквенного символа "с"
^ поиск начала строки или последовательности строк
$ поиск конца строки или последовательности строк
. поиск любого символа, кроме символа новой строки
[s] поиск любого символа из набора "s"
[^s] поиск любого символа, отличного от "s" и символа новой строки
r* поиск ноль или больше
r+ поиск одного или больше
r? поиск ноль или один
(r) группирование: поиск r
r1r2 конкатенация: поиск r1 затем r2
r1|r2 поиск либо r1 либо r2

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

ARGC число аргументов командной строки
ARGV массив аргументов командной строки
FILENAME имя текущего вводного файла
FNR номер записи в текущем файле
FS разделитель поля вводного файла; (по умолчанию - пробел)
FN число полей в текущей записи
NR число считанных на данный момент записей
OFMT выводной формат для цифр; (по умолчанию - %6.g)
OFS разделитель поля выводного файла
ORS разделитель записи выводного поля
RS разделитель записи вводного файла
RSTART индекс первого выбранного символа при помощи match(); 0 - если символ не найден
RLENGTH длина строки, выбранной при помощи match() -1 - если строка не найдена
SUBSEP разделитель индексов элементов массива; (по умолчанию - \034)

10.27.1. Ограничения

При работе с awk вы должны придерживаться следующих ограничений:

100 полей
2500 символов во вводной записи
2500 символов в выводной записи
1024 символов в индивидуальном поле
1024 символов в строке printf
400 символов в строке, заключенной в кавычки
400 символов в классе символов
15 открытых файлов
1 канал

10.27.2. Инициализация, сравнение и тип приведения

Каждые переменная или поле могут потенциально быть строкой или числом, либо состоять из того и другого. Когда значение переменной устанавливается при присвоении:

	var = expr 

то тип переменной определяется выражением. В арифметических выражениях тип - цифровой, в конкатенации - строковый, и т.д. Если назначение является простым копированием:

	v1 = v2

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

	expr + 0

и к строковому типу:

	expr ""

(это конкатенация с пустой строкой)

Инициализированные переменные имеют цифровое значение 0, а строковые - значение "". Соответственно, если x проинициализировано, то оператор

	if (x) ...

имеет значение "ложь", а

        if (!x) ...
        if (x == 0) ...
        if (x == "") ...

все являются истиной, но

        if (x == "0") ...

является ложью.

Тип поля определяется по контексту. Например:

	$1++

означает, что $1 будет цифровым, и

	$1 = $1 "," $2

означает, что и $1 и $2 являются строковыми. Приведение к типу выполняется при необходимости.

Если по контексту тип не может быть определен, например:

	if ($1 == $2) ...

тип поля определяется при вводе.

Поля, которые являются нулевыми, имеют строки со значением "", они не являются цифровыми.

Определения типов для элементов массива, созданных split(), аналогичны определению типов для полей.

Так, если arr[i] не существует, то :

	if (arr[i] == "") ...

приводит к тому, что он появляется со значением "".


[ Назад | Оглавление | Далее ]










helloworld.ru © 2001-2021
Все права защищены