Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
VPS/VDS серверы. 30 локаций на выбор

Серверы VPS/VDS с большим диском

Хорошие условия для реселлеров

4VPS.SU - VPS в 17-ти странах

2Gbit/s безлимит

Современное железо!

Бесплатный конструктор сайтов и Landing Page

Хостинг с DDoS защитой от 2.5$ + Бесплатный SSL и Домен

SSD VPS в Нидерландах под различные задачи от 2.6$

✅ Дешевый VPS-хостинг на AMD EPYC: 1vCore, 3GB DDR4, 15GB NVMe всего за €3,50!

🔥 Anti-DDoS защита 12 Тбит/с!

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; чтобы трактовалось как цепочка - сконкатенируйте его с пустой цепочкой ""

VPS в России, Европе и США

Бесплатная поддержка и администрирование

Оплата российскими и международными картами

🔥 VPS до 5.7 ГГц под любые задачи с AntiDDoS в 7 локациях

💸 Гифткод CITFORUM (250р на баланс) и попробуйте уже сейчас!

🛒 Скидка 15% на первый платеж (в течение 24ч)

Скидка до 20% на услуги дата-центра. Аренда серверной стойки. Colocation от 1U!

Миграция в облако #SotelCloud. Виртуальный сервер в облаке. Выбрать конфигурацию на сайте!

Виртуальная АТС для вашего бизнеса. Приветственные бонусы для новых клиентов!

Виртуальные VPS серверы в РФ и ЕС

Dedicated серверы в РФ и ЕС

По промокоду CITFORUM скидка 30% на заказ VPS\VDS

Новости мира IT:

Архив новостей

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 7861149
Пресс-релизы — pr@citforum.ru
Обратная связь
Информация для авторов
Rambler's Top100 TopList This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2019 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...