|
|
www.lissyara.su
—> документация
—> man
—> awk
awk man
Автор: Andy.
Имя
awk - шаблонно направленый язык просмотра и обработки
Сценарий
awk [ -F [fs ] [ -v var=value ] [ 'prog' | -fprogfile ] [file ...]
Описание
Awk сканирует каждый входной файл на строки совпадающие с заданными шаблонами определенных в progr, или в одном или нескольких файлах, определенных ключом -f progfile. К каждому шаблону может быть привязано действие, которое будет выполнено, когда строка файла соответствует образцу. Каждая строка, совпадающая с частью шаблона, каждого состояние выполнения по шаблону; привязанное действие выполняется для каждого совпавшего шаблона.Имя файла - означает стандартный ввод. Любой файл формы var=value, рассматривается как привязка, а не как имя файла, и запускается во время открытия как если бы это было имя файла. Опция -v сопровождаемая var=value, привязка выполняемая перед запуском prog; любое количество вариантов опции -v может быть задано. Опция -Ffs определяет разделитель поля ввода регулярного выражения.
Строка ввода обычно содержит поля, разделенные пробелом (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, ...) in array-name где relop один из шести относительных операторов в C, а matchop так же как ~ (совпадает) или !~ (не совпадает). Условно - это арифметическое выражение, относительное выражение, или булева комбинация двух выражений.
Специальные шаблоны BEGIN и END, могут использоваться для получения управления прежде, чем первая входная строка будет прочитана и после последней. BEGIN и END не сочитаются с другими шаблонами.
Имена переменных со специальными значениями:
CONVFMT - формат преобразования используемый при преобразовании чисел (по умолчанию %.6g)
FS - регулярное выражение используемое для разделения полей; так же устанавливается
опцией -Ffs.
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 к нему; для вызова выражения как строки добавте к нему "". Правила для переменных в функциях; оба ухудшают синтаксис.
размещено: 2007-08-24,
последнее обновление: 2007-08-25,
автор: Andy
|
|
|
|
2014-07-27, lissyara
gmirror
Удалённое создание софтверного зеркала средствами gmirror, на диске разбитом с использованием gpart. Использование меток дисков для монтирования разделов.
2013-08-20, zentarim
Scan+Print server FreeBSD 9
Настройка сервера печати и сервера сканирования под управлением операционной системы FreebSD 9 для МФУ Canon PIXMA MP540
2011-11-20, BlackCat
Разъём на WiFi-карту
Делаем съёмной несъёмную антену на WiFi-карте путём установки ВЧ-разъёма
2011-09-14, manefesto
Настройка git+gitosis
Настройка системы контроля версия исходного кода в связке git+gitosis+ssh
2011-08-14, zentarim
Wi-FI роутер + DHCP + DNS
Настройка Wi-Fi роутера на Freebsd 8 + DNS сервер + DHCP сервер: чтобы Wi-Fi клиенты были в одной подсети с проводными, проводные и беспроводные клиенты получали адреса автоматически по DHCP, кэширующ
2011-06-15, -ZG-
Охранная система на FreeBSD+LPT
В этой статье описана попытка реализации простой охранной системы на базе FreeBSD с подключением к ней охранных устройтсв на LPT порт и видеорегистрацией.
2011-03-13, terminus
ng_nat
Описание работы ng_nat, практическое использование, достоинства и недостатки в сравнении с ipfw nat
2011-02-20, Капитан
Nagios+Digitemp
Статья описывает создание системы оповещения о превышении температуры в специальных помещениях на основе Nagios с использованием программы Digitemp.
2011-02-17, Le1
Zyxel Configuration
Скрипт для массового изменения конфига свичей Zyxel. Берет из файла iplist список ip-шек, заходит последовательно на каждый и выполняет комманды из файла commands, записывая происходящее в лог файл.
2011-02-16, fox
hast carp zfs ucarp cluster
HAST (Highly Available Storage), CARP, UCARP, ZFS, Cluster настройка и одаптация плюс личные размышления…
2011-02-04, BlackCat
Восстановление ZFS
История о том, как был восстановлен развалившийся RAIDZ ZFS-пул (перешедший в FAULTED) с помощью скотча и подручных средств. Или о том, какие приключения ожидают тех, кто не делает резервных копий.
2011-02-03, Капитан
1-Wire
Статья описывает самостоятельное изготовление контроллера DS9097 для съёма показаний с датчиков температуры DS1820 с помощью программы Digitemp.
2011-01-28, Капитан
Температура в серверной
Статья описывает построение системы наблюдения за температурой в помещении серверной с использованием программы Digitemp и выводом графиков в MRTG
2011-01-21, m4rkell
Syslog server
Как то буквально на днях, у нас завалилось, что то в еве) или не в еве не суть. Суть в том, что когда захотели снять логи с хостов esx обнаружили, что хранят эти негодяи логии только за последнии сутк
2011-01-07, lissyara
Canon/gphotofs
Монтирование цифровых фотоаппаратов Canon (PTP) как файловой системы, автоматизация этого процесса через события devd и внешние скрипты.
2010-12-13, Al
IPSec
Описание принципов работы IPSEC и способов аутентификации.
2010-12-07, manefesto
FreeBSD on flash
Было принято решении переехать на USB Flash и установить минимальный джентельменский набор для работы своего роутера. Делаем =)
2010-12-05, Fomalhaut
root ZFS, GPT
Инструкция по установке FreeBSD с использованием в качестве таблицы разделов GPT и в качестве основной файловой системы - ZFS
2010-09-05, Cancer
Настройка аудиоплеера на ximp3
Цели: Простенький аудиоплеер, для того что бы тетя продавец в магазине утром пришла нажала на кнопку Power и заиграла в зале музыка, так же был доступ по сети, общая шара куда можно заливать музыку, к
2010-08-31, Cancer
Установка и настройка OpenVPN
На днях появилась задача - объединить головной офис и 3 филиала в одну сеть через интернет посредством OpenVPN, чтобы люди могли подключаться через RDP к базам 1С на серверах.
|