Мы — долго запрягаем, быстро ездим, и сильно тормозим.

RFC
Программирование
FreeBSD
man
  vsftpd
  qemu
  dump
  restore
  awk
  sed
  tar
  security
EXIM


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



Хостинг HOST-FOOD

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С на серверах.
подписка

    вверх      
Статистика сайта
Сейчас на сайте находится: 81 чел.
За последние 30 мин было: 295 человек
За сегодня было
4449 показов,
1123 уникальных IP
 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Установите трубы ПВХ для питьевой воды для долговечности

Время генерации страницы 0.0323 секунд
Из них PHP: 26%; SQL: 74%; Число SQL-запросов: 48 шт.
Исходный размер: 69499; Сжатая: 15262