Меню сайта
Категории каталога
awk
Имя awk - шаблонно направленый язык просмотра и обработкиСценарий awk [ -F [fs ] [ -v var=value ] [ 'prog' | -f progfile ] [file ... ]Описание Awk сканирует каждый входной файл на строки совпадающие с заданными шаблонами определенных в progr , или в одном или нескольких файлах, определенных ключом -f progfile . К каждому шаблону может быть привязано действие, которое будет выполнено, когда строка файла соответствует образцу. Каждая строка, совпадающая с частью шаблона, каждого состояние выполнения по шаблону; привязанное действие выполняется для каждого совпавшего шаблона.Имя файла - означает стандартный ввод. Любой файл формы var=value , рассматривается как привязка, а не как имя файла, и запускается во время открытия как если бы это было имя файла. Опция -v сопровождаемая var=value , привязка выполняемая перед запуском prog ; любое количество вариантов опции -v может быть задано. Опция -F fs определяет разделитель поля ввода регулярного выражения. Строка ввода обычно содержит поля, разделенные пробелом (white space), либо регулярным выражением FS . Поля обозначаются как $1 , $2 , а $0 означает целую строку. Если FS не определен, входная строка разделяется на одно поле на символ. Состояние выполнения по шаблону имеет формуpattern { action } Пропущенный { action } , означает печать строки; пропущеная строка всегда совпадает. Состояние выполнения по шаблону разделены символом новой строки или двоеточием. Действие - это последовательность состояний. Состояние может быть одним из следующих: if( expression ) statement [ else statement ] while( expression ) statement for( expression ; expression ; expression ) statement for( var in array ) statement do statement while( expression ) break continue { [ statement ... ] }expression # обычно var = expression print [ expression-list ] [ > expression ] printf format [ , expression-list ] [ > expression ] return [ expression ] next # пропустить оставшиеся шаблоны на этой входной строке nextfile # пропустить остаток файла, открыть следующий, начать сначала delete array [ expression ]# удалить элемент массива delete array # удалить все элементы массива exit [ expression ] # выйти незамедлительно; статус является выражением Состояния закрываются двоеточиями, символами новой строки или правой квадратной скобкой. Пустая строка выражений начинается с $0 . Строки содержащие символы цитирования " ", содержимое в них распознается как C последовательности. Выражения берут строку или числовое значение за соответствие и строятся с использованием операторов + - */ % ^ (возведение в степень) и конкатенацию (обозначенную пробелом). Операторы ! ++ — += -= *= /= %= ^= > >= < <= == != ?: так же могут являться выражениями. Переменные могут быть скалярными, элементами массива (обозначемыми x [ i ] ) или полями. Переменные инициализируются с пустой строки.Приписки к массиву, могут быть любой строкой, не обязательно числовой; тем самым достигается поддержка формы ассоциативной памяти. Множественные приписки, такие как [i,j,k] , допускаются; элементы связаны, разделяются значением SUBSEP . Состояние print , печатает свои аргументы на стандартный вывод (или в файл, если присутствуют >file или >>file , или в пайпе если присутствует | cmd ), разделяемые текущим разделителем полей, и завершаемые разделителем выходной записи. file и cmd могут иметь буквенные имена или введенные выражения; идентичные строковые значения в разных состояниях обозначают тот же самый открытый файл. Состояние printf форматирует список выражений согласно формату (смотрите printf (3) ). Встроенная функция close( expr ) , закрывают файл или пайп expr . Встроенная функция fflush( expr ) , очищает любой буферный выход для файла или пайпа expr . Математические функции exp , log , sqrt , sin , cos , и atan2 встроены. Другие встроенные функции:length - длина аргумента взятая как строка, или $0 если нет аргумента.random - случайный номер (0,1)srand - устанавливает сид для rand и возвращает предыдущий сид.int - усекает до значения целого числаsubstr( s , m , n ) - n -символьная подстрока s , которая начинается с позиции m , увеличиваясь на 1 .index( s , t ) - позиция в s , где строка t появляется, или 0 если этого не происходит.match( s , r ) - позиция в s , где появляется регулярное выражение r , или 0 если этого не происходит. Переменные RSTAT и RLENGTH установлены на позицию и длину совпавшей строки.split( s , a , fs ) - разделяет строку s на массив элементов a [ 1 ] , a [ 2 ] , ... , a [ n ] , и возвращает n . Разделение осуществляется регулярным выражением fs , или разделителем полей FS , если fs не задан. Пустая строка, как разделитель, разделяет строку на один массив элементов на строку.sub( r , t , s ) - подменяет t до первого появления регулярного выражения r или строки s . Если s не задано, $0 используется.gsub - тоже самое, что и sub , за исключением того, что все возникающие регулярные выражения заменены; sub и gsub возвращают количество замен.sprintf( fmt , expr , ... ) - строка получившаяся из форматирования expr , согласно printf (3)[/brown] формату [color=green]fmt .system( cmd ) - запускает cmd и возвращает статус выхода.tolower( str ) - возвращает копию str где все символы верхнего регистра, изменены на соответствующие символы нижнего регистра.toupper( str )[ - возвращает копию str где все символы нижнего регистра, изменены на соответствующие символы верхнего регистра.``функция'' getline устанавливает $0 на следующую входную строку записанную из текущего файла;getline <file устанавливает $0 на следующую запись из файла. getline x устанавливает вместо этого переменную x . Наконец, cmd | getline переопределяет выходной cmd в getline ; каждый вызов getline возвращает следующую строку из cmd . Во всех случаях, getline возвращает 1 для упешного ввода, 0 для конца файла, и -1 для ошибки. Шаблоны - это произвольные булевы комбинации (с !|| &&) регулярных выражений и относительных выражений. Регулярные выражения такие же как и egrep (смотрите grep ). Изолированые регулярные выражения в шаблоне, применяются для всей строки. Регулярные выражения могут так же появлятся в относительных выражениях, используя оператор ~ и !~ . / re / - это константа регулярного выражения; любая строка (константа или переменная) может быть использована как регулярное выражение, исключая позицию изолированного регулярного выражения в шаблоне. Шаблон может содержать два шаблона разделенных запятой; в таком случае действие производится для всех строк появившегося первого шаблона, до возникновения второго. Относительными выражениями являются одни из следующих:expression matchop regular-expression expression relop expression expression[color=brown]in array-name (expr ,expr , ...) inarray-name где relop один из шести относительных операторов в C, а matchop так же как ~ (совпадает) или !~ (не совпадает). Условно - это арифметическое выражение, относительное выражение, или булева комбинация двух выражений. Специальные шаблоны BEGIN и END , могут использоваться для получения управления прежде, чем первая входная строка будет прочитана и после последней. BEGIN и END не сочитаются с другими шаблонами. Имена переменных со специальными значениями: CONVFMT- формат преобразования используемый при преобразовании чисел (по умолчанию %.6g)FS - регулярное выражение используемое для разделения полей; так же устанавливается опцией -F fs .NF - число полей в данной записиNR - порядковый номер текущей записиFNR - порядковый номер текущей записи в текущем файлеFILENAME - имя текущего входного файлаRS - разделитель входной записи (по умолчанию символ новой строки)OFS - разделитель поля выходной записи (по умолчанию пусто)ORS - разделитель выходной записи (по умолчанию символ новой строки)OFMT - выходной формат чисел (по умолчанию %.6g)SUBSEP - разделитель множественных приписок (по умолчанию 034)ARGC - счетчик аргументов, назначаемыйARGV - массив аргументов, назначаемый; не пустые члены берутся из фаловых именENVIRON - массив окружения переменных; приписки являются именами Функции могут быть определены (в позиции состояния выполнения по шаблону) как:function foo(a, b, c) { ...; return x } Параметры проходят по значению если скаляр и по ссылке, если массив; функции могут быть вызваны рекурсивно. Параметры локальны к функции; все остальные переменные являются глобальными. Таким образом, локальные переменные могут быть созданы предоставлениям лишних параметров в определении функций.Примеры length($0) > 72 Печатает строку длинее 72 символов. { print $2, $1 } Печатает первые два поля в обратном порядке. BEGIN { FS = ",[ \t]*|[ \t]+" } { print $2, $1 } То же самое с входными полями, разделенными запятой, и/или пустыми местами и табуляцией. { s += $1 } END { print "sum is", s, " average is", s/NR } Складывает первую колонку, печатает сумму и среднее число. /start/, /stop/ печатает все строки между парами start/stop. BEGIN { # симуляция echo(1) for (i = 1; i < ARGC; i++) printf "%s ", ARGV[i] printf "\n" exit }Смотрите так же lex (1) , sed (1) A. V. Aho, B. W. Kernighan, P. J. Weinberger, The AWK Programming Language, Addison-Wesley, 1988. ISBN 0-201-07981-XОшибки Нет никаких явных преобразований между числами и строками. Для вызова выражения которое будет расценено как номер добавьте 0 к нему; для вызова выражения как строки добавте к нему "". Правила для переменных в функциях; оба ухудшают синтаксис.
Категория: Man pages | Добавил: oleg (12.12.2007)
Просмотров: 1863 | Рейтинг: 0.0 /0 |
- Оценить -
Отлично
Хорошо
Неплохо
Плохо
Ужасно
Добавлять комментарии могут только зарегистрированные пользователи.
[
Регистрация |
Вход ]
Форма входа
Друзья сайта