mark.zlatoust.ru Послать письмо Webmaster-у Web-Master © Бернадинер Марк 

Златоуст.Ru

 

 

      AWK(1)                                                   AWK(1)

      НАЗВАНИЕ
              awk - сопоставление с шаблонами и преобразование текста

      СИНТАКСИС
              awk  [-Fсимвол] [[-f] программа] [аргумент ...] [файл ...]

      ОПИСАНИЕ
              Команда awk сопоставляет строки исходных файлов с  шаб-
              лонами, определенными в программе. Шаблоны можно задать
              либо непосредственно в командной строке, либо поместить
              в файл с именем программа и воспользоваться опцией  -f.
              Если шаблоны указаны в  командной  строке,  их  следует
              заключить в одинарные кавычки ('), чтобы  избежать  ин-
              терпретации shell'ом.

              Команде  awk могут быть переданы аргументы в виде x=...
              y=... и т.д. (см. ПРИМЕРЫ).

              Файлы читаются в том порядке, как они заданы.  Если  не
              указано ни одного файла или задано имя -,  используется
              стандартный ввод. Ввод для awk делится на записи,  раз-
              деляемые специальным символом. По умолчанию это перевод
              строки; в таком случае awk обрабатывает ввод построчно.
              Разделитель записей можно изменить, переопределив пере-
              менную RS. Каждая запись делится на поля,  ограниченные
              разделителями полей (по умолчанию  -  пробелами).  Этот
              разделитель можно изменить, переопределив переменную FS
              или указав флаг -Fсимвол. Поля исходных строк  доступны
              по именам $1, $2,...; $0 - вся входная строка.

              Для каждого шаблона из программы может быть задано дей-
              ствие, которое будет произведено со всякой строкой, ус-
              пешно сопоставленной с шаблоном. Оператор шаблон-дейст-
              вие имеет вид:

                   шаблон { действие }

              Каждая исходная строка сопоставляется с каждым из  шаб-
              лонов; в случае успеха выполняются указанные  действия.
              После сопоставления со всеми шаблонами вводится следую-
              щая строка и процесс сопоставления  повторяется.  Может
              быть опущен либо шаблон, либо действие, но не оба вмес-
              те. Если для данного шаблона не  указаны  действия,  то
              строка просто копируется на стандартный вывод. Если для
              действия не определен шаблон, то оно будет  выполняться
              для каждой входной строки. Строки, которые  не  удалось
              сопоставить ни одному шаблону, игнорируются.

              Действие есть последовательность  операторов.  Так  как
              шаблоны и действия могут быть опущены, то, чтобы разли-
              чать их в программе, последние надо  брать  в  фигурные
              скобки. Оператор есть одна из конструкций:

                   if ( условие ) оператор [ else оператор ]
                   while ( условие ) оператор
                   for ( выражение; условие; выражение ) оператор
                   break
                   continue
                   { [ оператор ] ... }
                   переменная = выражение
                   print [ список_выражений ] [> выражение ]
                   printf формат [, список_выражений ] [> выражение ]
                   next  # пропустить оставшиеся шаблоны и перейти к
                           следующей строке
                   exit  # пропустить оставшиеся строки

              Операторы завершаются точкой с запятой, переводом стро-
              ки или правой скобкой. Пустой список_выражений означает
              всю строку. Выражения строятся из  цепочек  символов  и
              чисел с помощью операций +, -, *, /, %  и  конкатенации
              (обозначается пробелом). В выражениях также  можно  ис-
              пользовать операции из языка C: ++, --, +=, -=, *=, /=,
              %=. Переменные инициализируются пустыми цепочками.  Пе-
              ременные  могут  быть  скалярами,  элементами   массива
              (обозначается x[i]) или полями. Индексами массива могут
              служить любые (не обязательно числовые) цепочки  симво-
              лов, что позволяет реализовать  разновидность  ассоциа-
              тивной памяти. Цепочки символов заключаются  в  двойные
              кавычки (").

              Оператор print выдает свои аргументы на стандартный вы-
              вод (или в файл, если присутствует  часть  >выражение),
              разделяя их текущим разделителем полей и завершая  каж-
              дую  запись  выходным разделителем  записей.   Оператор
              printf делает то же самое, но под  управлением  формата
              [см. printf(3S)].

              Встроенная функция length возвращает длину своего аргу-
              мента, рассматривая его как цепочку символов; если  ар-
              гумент опущен, то возвращается  длина  текущей  строки.
              Определены также  следующие  встроенные  функции:  exp,
              log, sqrt и int (int отбрасывает дробную  часть  своего
              аргумента). Функция substr(s, m, n)  возвращает  n-сим-
              вольную подцепочку цепочки s, начинающуюся с позиции m.
              Функция sprintf(формат, выражение, выражение,...)  пре-
              образует выражения в соответствии с указанным  форматом
              [см. printf(3S)] и возвращает полученную цепочку симво-
              лов.

              Шаблон - это произвольная логическая  комбинация,  сос-
              тавленная с помощью операций !, ||, && и скобок из  ре-
              гулярных выражений и  выражений  сравнения.  Регулярные
              выражения  обрамляются  символами  /   [подробнее   см.
              egrep(1)]. Отдельное регулярное выражение в шаблоне со-
              поставляется со всей строкой. Регулярные выражения  мо-
              гут входить и в выражения сравнения. Шаблон может  сос-
              тоять из двух шаблонов, разделенных запятой;  при  этом
              указанные действия выполняются  для  всех  строк  между
              строкой, удовлетворяющей первому  шаблону,  и  строкой,
              удовлетворяющей второму шаблону.

              Выражение сравнения - это одна из  следующих  конструк-
              ций:

                   выражение  опер_сопост  регулярное_выражение
                   выражение  опер_сравн  выражение

              где опер_сравн - любая из шести операций сравнения язы-
              ка C, опер_сопост это ~ (содержится) или !~ (не  содер-
              жится).

              Условие - это арифметическое выражение, выражение срав-
              нения или их логическая комбинация.

              Для выполнения каких-либо  действий  перед  первой  или
              после последней строки определены  специальные  шаблоны
              BEGIN и END. BEGIN должен быть первым шаблоном,  END  -
              последним. Например, для использования символа c в  ка-
              честве разделителя полей можно либо запустить программу
              с флагом -Fc, либо указать

                   BEGIN { FS = c }

              Остальные специальные переменные:

              NF   Количество полей в текущей записи.

              NR   Порядковый номер текущей записи.

              FILENAME
                   Имя файла, из которого в данный момент производит-
                   ся ввод.

              OFS  Разделитель полей при выводе, по умолчанию пробел.

              ORS  Разделитель записей при выводе, по умолчанию пере-
                   вод строки.

              OFMT Формат вывода чисел, по умолчанию %.6g.

      ПРИМЕРЫ
              1.  Вывести строки файла f1, содержащие более 72 симво-
              лов:

                   awk  'length > 72' f1

              2. Вывести первые два поля файла f2 в обратном порядке:

                   awk  '{ print $2, $1 }' f2

              3. Сложить числа, стоящие в первом  столбце  файла  f3,
              вывести сумму и среднее арифметическое:

              В файле prog:

                        { s += $1 }
                   END  { print "sum is", s, " average is", s/NR }

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

                   awk -f prog f3

              4. Вывести поля файла f4 в обратном порядке:

                   awk  '{ for (i = NF; i > 0; --i) print $i }' f4

              5. Вывести все строки файла f5, находящиеся между пара-
              ми start/stop

                   awk  '/start/,/stop/' f5

              6. Вывести те строки файла f6, у которых первое поле не
              совпадает с первым полем предыдущей строки:

                   awk  '$1 != prev { print; prev = $1 }' f6

              7. Распечатать файл f7, вставляя после слова "Page" но-
              мер страниц, начиная с пятой:

              В файле prog:

                   /Page/ { $2 = n++ }
                          { print }

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

                   awk  -f prog n=5 f7

      СМ. ТАКЖЕ
              egrep(1), lex(1), sed(1).
              printf(3S) в Справочнике программиста.

      СЮРПРИЗЫ
              Входные пробелы не сохраняются при  выводе,  если  поля
              этой записи подвергались изменениям.

              В языке команды awk  отсутствуют  явные  преобразования
              между  цепочками  символов  и  числами. Чтобы выражение
              трактовалось как число, прибавьте к нему 0; чтобы трак-
              товалось как цепочка - сконкатенируйте его с пустой це-
              почкой "".



 

 

Бернадинер Марк Абрамович

Мое резюме

Компьютерная страничка

Ресурсы сети

Фотоальбом

 

 

 

mark.zlatoust.ru Послать письмо Webmaster-у Web-Master © Бернадинер Марк