Руководство команды AWK

Ответ: Процесс реализации AWK

(1) Во- первых, операция инициализации выполняется BEGIN {} блок
(2) , а затем возвращают в указанном файле данных считывается в строке данных (обновляется автоматически NF, NR, $ 0, $ 1 ....., и т.п. встроенных переменных значение)
(3) выполняет последние последующие операции обработки блочного END {}

Два: AWK опции
-F «:» Разделитель указать каждое поле
-v переменная = значение Пользовательские переменные

Три: основное использование AWK

  1. команда Выход

печать ITEM1, ст.2

Ключ: (1), так как количество сепаратора
(2) выходной сигнал каждого элемента может быть строкой, может быть числовое значение, выражение текущих полой записи или переменным AWK
Примера: головка -4 / и т.д. / Fstab | AWK '{Print "Hello", $}. 1'
(. 3) опускается , если пункта. Эквивалент $ 0, печать всей строки

2. Переменные

(1) встроенные переменные

FS: поле ввода Разделитель равно -F опции по умолчанию пустой
OFS: когда разделитель выходных полей, по умолчанию пустой
RS: Когда разделитель строки ввода, по умолчанию \ n-
ОШ: когда выходной разделитель строки по умолчанию \ п Пример: AWK -F ":" -v нефтесервисных = ":" '{.. Печать $ 1, $ 2, $ 3}' / и т.д. / The PASSWD
из NF: количество полей, линия в данный момент обрабатываются (столбцы)
Примечание: $ NF печати последняя поле
NR: число строк в настоящее время обрабатываются
ПЧНО: каждый из файлов отсчитывается (количество строк)
FILENEME: AWK просмотреть имя файла
$ 0: в настоящее время обрабатывается весь линия строки
$ N: в данный момент обрабатываются н-е поле (п-й столбца )
ARGC: Пример параметры команды номер строки: AWK «Print ARGC Бегин {}» / и т.д. / Fstab / и т.д. / issuee
ARGV: массив, хранится в параметрах командной строки приведены

AWK процесс исполнения:
(1) Во- первых, инициализация выполняется BEGIN {} блока являются:
(2) Затем цикл считывает данные из указанной строки в файле данных автоматически обновляет {NF, NR, $ 0, $ 1 ... .} значение или тому подобное встроенной переменной)
и выполняет «изменить режим или команда условного {}»:
. (3) и, наконец, выполнить END {} блок последующей обработки операции
AWK варианты

-F «:»: Указать каждый разделитель полей, пространства по умолчанию
-v переменная = значение пользовательских переменных

1. Вывод команды
печати item1 ст.2

Ключ: (1) запятая
каждого элемента (2) может выводиться строка может быть числовой, выражение текущей записи полей, переменных или AWK
головы -5 / и т.д. / Fstab | AWK «{Печати«Привет , «$ 1} '
(3) Пункт Если опущена, эквивалент $ 0, печать всей строки
2, переменный

(1) встроенной переменной
FS: Field Separator вход равным -F по умолчанию пустой
OFS: когда выходной разделитель полей по умолчанию пустой
RS: Когда разделитель строки ввода, по умолчанию \ n-
в ПРС: разделитель строки на выходе, по умолчанию \ n -
AWK -F ":" -v в ФСУ = ":" '{.. Печать $ 1, $ 2, $ 3}' / и т.д. / The PASSWD
число полей NF текущей строки обрабатываются (столбцы)
Примечание: $ NF: Печать последнее поле
NR обрабатываемый в настоящий момент порядковый номер (число строк) строка
в FNR: каждый файл отдельно подсчитать: количество строк
имя файла имя_файла AWK просматривает
всю строку грести $ 0 в данный момент обрабатываются
$ N в данный момент обрабатываются п-го поля (п колонка)
ARGC: количество аргументов командной строки
AWK 'Print ARGC в BEGIN {}' / и т.д. / Fstab / и т.д. / Выпуск
3.
ARGV: массив, хранится в параметрах командной строки данной:
AWK «Бегин {Печать ARGV [0]} '/ и т.д. / Fstab / и т.д. / No
AWK
AWK' Бегин {Печать ARGV [. 1]} '/ и т.д. / Fstab / и т.д. / No
/ и т.д. / Fstab
AWK' Бегин {Печать ARGV [2]} «/ и т.д. / Fstab / и т.д. / No
/ и т.д. / No

(2) Пользовательские переменные
определены методом

  1. -v переменная = значение
  2. BEGIN {переменная = значение}

(3) переменную AWK, используя Linux

3.printf
форматированный вывод: формат Printf, item1, item2, ...

(1) формат должен дать
(2) не переносится, учитывая необходимость явного символа новой строки разделителя, \ п ------
необходимо указать формат каждого элемента за отформатированный символ (3.);

Спецификатор
% C: показать ASCII -
% D,% я отобразить десятичное число
% е,% Е цифрового дисплея научная нотация
% F , как показано плавающим
% г,% G отображается в научной записи или формат значения с плавающей точкой
% Строка отображения сек
% U целое число без знака
%% показать себя%

例子
AWK -F ":" '{Printf "Имя пользователя:% s \ п", $ 1}' / и т.д. / пароль

AWK -F: '{Printf "Имя пользователя:% s, UID:% d \ п", $ 1, $ 3}' / и т.д. / пароль

Модификаторы

[#.]: Первая цифра используется для контроля ширины дисплея тоже, второй точности десятичной запятой.

% 3.1f
Примеры
AWK -F: '{Printf "Имя пользователя :% 10s, UID:% d \ N", $ 1, $ 3}' / и т.д. / пароль по
умолчанию правильного выравнивания

-: Левый
AWK -F: '{Printf "Имя пользователя :% -10s, UID:% d \ п", $ 1, $ 3}' / и т.д. / пароль

+: Отображение символов значения
AWK -F: '{PRINTF "Пользователь :% -10s, UID:% + d \ N", $ 1, $ 3}' / и т.д. / пароль

4. Операторы
(1) арифметические операции
х + у, х, х * у, х / 5, х ^ у, х% у

+ X: преобразование в числах

(2) оператор присваивания
+ = = - = = * /% = = = ^
+ -

(3) операторы сравнения:
<Меньше
<= Меньше или равно
== Равно
= Не равно!

= Больше или равно
~ соответствует регулярному выражению
! ~ Не соответствует регулярному выражению

(4) соответствие на шаблон
- согласование ~ Несовпадение

(5) логические операторы
&& ||!

(6) вызов функции
FUNCTION_NAME (параметр 1, параметр 2)

(7)条件表达式
селектор? если-истинное самовыражение, если-ложь выражения
AWK -F: «{$ 3> = 500 UserType = "Common User": UserType = "Сисадмин или SysUser"; Printf "% 15s:% - с \ п"?, $ 1 , UserType}»/ и т.д. / пароль

  1. ОБРАЗЕЦ (режим)
    Режим пустого :. воздуха, соответствующая каждую строку (1) .
    (2) ./ регулярного выражение /: здесь быть согласовано только шаблон линии
    AWK '/ ^ UUID / {печати $ 1}' / и т.д. / Fstab

(3) releational реляционного выражения выражения, есть на самом деле ложные результаты, будет обработан как истинный
AWK -F: / и т.д. / ПАРОЛЬ '$ 3> = 500 1 {Print $, $ 3.}.
AWK -F: «$ НФА ==" / бен / Баш «$ {Print 1, из NF.} $ '/ и т.д. / в PASSWD
AWK -F:' {. Печать 1, из NF} $ ~ НФ / с Баш $ / $ $«/ и т.д. / PASSWD
4.line диапазон: диапазон строк
указан от начать линию, конец строки
кошки / и т.д. / пароль | AWK -F : «/ ^ корень /, / ^ синхронизации / {печать $ 1}»
верно: результат ненулевое значение, не пустая строка верно

6.BEGIN / END рисунок
перед тем инструкция редактирования BEGIN {} // Запуск первой линии операций обработки текста
после операции КОНЦА команд редактирования {} // после последней строки текста

Встроенные функции

длина () Возвращает длину строки

Упражнения
практика Текст
CAT grade.txt
M.Tansley. 8 40 05/99 48311 Зеленый 44
J.Lulu Зеленый. 9 06/99 48317 24 26
P.Bunny Желтый 12 35 48 02/99 26
J.Troll 48 07/99 42 Коричневый 12 26 26 -3
L.Tansley 05/99 47 30 12 28 12 2-Браун

Этот файл имеет семь полей

Бумага для печати
AWK '{печать}' grade.txt

Печать первой колонки и седьмой столбец
AWK «{печать $ 1, $ 7}» grade.txt

Печать строки 2-4 строки
AWK '(NR> = 2) && (NR <= 4) {Печать}' grade.txt

Печать содержимого первой строки и третий ряд

AWK 'NR == 1 || NR == 3' grade.txt

Добавлено в начале заголовка файла
AWK «BEGIN {печати„дата возраст \ п -----“} {печать}» grade.txt

В конце дополнительного содержимого файла
AWK «{печать} END {печать „ПО Linux“}» grade.txt

Выход к выходу экрана в файл в то время как
AWK «{печати} END {печати „ПО Linux“}» grade.txt | тройник a.txt

Анализируя весь ряд матчей Браун, весь выходной матч линии

AWK '$ 0 ~ / Brown / {печати $ 0}' grade.txt

Анализируя третий столбец равен 48, весь выходной матч линии

AWK '$ 3 == "48" {печать}' grade.txt

Анализируя весь ряд не соответствует Браун, выход не соответствует всей линии
AWK «$ 0! ~ / Brown / {печати $ 0}» grade.txt

Анализируя четвертый столбец равно Браун-2, вся линия не совпадает с выходом

AWK '$ 4! = "Brown-2" {печати $ 0}' grade.txt

Зеленый фильтр файлов или зеленый

AWK '/ [Гг] Reen / {печати $ 0}' grade.txt

Анализируя произвольные три буквы в начале передней
AWK «/ [Гг] Reen / {печати $ 0}» grade.txt

Анализируя всю строку или соответствие желто - коричневый
AWK '$ 0 ~ / (желтый | Brown) / {0} Распечатать $' grade.txt

P в начале строки фильтра
AWK '$ 0 ~ / Brown / {печати $ 0}' grade.txt

Статистические строки и столбцы
AWK 'END {печати NR}' grade.txt

AWK 'END {печать NF}' grade.txt

Печать / и т.д. / первый столбец и седьмой столбец PASSWD файл
AWK -F ":" '{Print $ 1, $ 7..}' / И т.д. / пароль
AWK 'Бегин {пФ = ":"} {.. Печать $ 1, $ 7}' / и т.д. / пароль

Все нечетные выходы
AWK '(NR% 2) == 1 {Печать}' grade.txt

Все даже выход
AWK '(NR% 2) == 0 {Печать}' grade.txt

Статистика для текущего имени пользователя для всех пользователей системы, UID, GID, Логин корпус, изготовленный из EXCEL системы электронных таблиц окна
$ 7 $ NF может использоваться вместо (последнего)

AWK -F ":" '{печать $ 1" , "$ 3", "$ 4", "7 $}' / и т.д. / пароль> user.csv

Предпоследний столбец контента печати
AWK -F ":" '{печати $ (NF-1)}' / и т.д. / пароль

Когда память используется более чем на 85% от тревоги (закругленные)
[$ (Free -m | AWK '/ Cache: {... Print Int ($ 3 / ($ 3 + $ 4) * 100)} /') -gt 85] && эхо «Память Он был использован более чем на 85% ".

Переменные AWK оболочки ссылки

имя = "zhangsan"

AWK -v нм = "$ имя" 'BEGIN {печати нм}'

AWK -v нм = "ABC" 'BEGIN {печати нм}'

AWK условный оператор

Единый формат конечности
'{если (выражение) Команда 1; 2 команды;} ....'

例子
AWK '{если ($ 6 <7 $) печать $ 7 слишком высока}' grade.txt
AWK '{если ($ 4 ~ / коричневый /) печать $ 0}' grade.txt
AWK «{если ($ 1 == "P.Bunny" && $ 4 == "Желтый") pinrt $ 0}»grade.txt

AWK '{если ($ 1 == "P.Bunny" || $ 4 == "желтый") pinrt $ 0}' grade.txt

AWK '{имя = $ 1; belets = $ 4, если (belets ~ / желтый /) имя печать}' grade.txt

AWK 'BEGIN {basefile = "27"} {если ($ 6 <basefile) напечатать $ 1}' grade.txt

если / другое еще , если оператор определяет множественной
«{если (выражение) Команда 1, команда 2, ...,
еще IF (выражение) {команда 1; 2 команды; ..; 1 команда еще, команда 2; .. .}

例子
AWK '{если ($ 7 == 44) напечатать $ 1; иначе , если ($ 7 == 28) печать $ 2, иначе напечатать $ 3}' grade.txt
AWK «{если ($ 7 == 44) печать $ 2, иначе напечатать $ 1} 'grade.txt

циркуляция

делать во время цикла для петли петли

в то время как заявление

в то время как (выражение) {} утверждение

пример

Начальное значение переменной 1, если я меньше равно NF (количество полей в записи), то оператор печати выполняется, не вырезать I приращения от 1 до I> NF

AWK 'NR == 1 {= 1, тогда как (г <= NF) {печать NF, $ я; я ++}}' grade.txt

AWK 'BEGIN {тест = 100; общая = 0, тогда как (г <= тест) {общая + = я; я ++;} печать общего количества;}'

цикл

Формат 1

Удобные элементы массива
для переменной (в массиве) {} утверждение
AWK 'Бегин {для (в ENVIRON K) {Print K "=" окружа [K];}}'

Формат 2

для (переменной; условие; выражение) {заявление}
'NR 1 == {для (I = 1. I <= НФ; I ++) Печать НФ, $ I;}' AWK grade.txt

AWK 'BEGIN {всего = 0, ибо (я = 0; г <= 100; я ++) {общая + = я;} печать общего количества;}'

перерыв, когда оператор перерыва используется во время или заявления вызывает цикл выхода программы

Когда продолжает заявление продолжаться тоги или для заявления, так что программа переходит к следующей итерации цикла

Это может привести к следующему чтения следующей строке ввода, и возвращается в начало сценария. Это позволяет избежать выполнения строки ввода других операций по току

Оператор выхода и выхода из главного контура управления до END; END, если присутствует; вывести не существует

делать-то время цикла (независимо от того, является ли первое условие истинно, то есть в первый раз через петлю)

Формат:

делать

{} Заявление в то время как (условие)

AWK «BEGIN {всего = 0; I = 0; делать {общая + = я; я ++; } В то время как (г <= 100) общей печати;

массив

Ассоциативный массив массив [элемент массива]
(1) может быть использована любая строка, строка двойные кавычки
(2) Если элемент массива имеет заранее не существует, в ссылке, AWK автоматически создает этот элемент, и инициализирует его значение «пустая строка»

Для того, чтобы определить, существует ли элемент массива, чтобы быть осуществлен с использованием «индекса в массиве» формат

wekdays = [пн] = "Понедельник"

AWK 'BEGIN {wekdays [ "ПН"] = "Понедельник"; wekdays [ "Вто"] = "Вторник", потому что (я в wekdays) {печать wekdays [я]}}'

я буду проходить через каждый переменный массив индексного wekdays

Приобретение системы TCP состояние соединения статистический
NetStat -tan | AWK '/ ^ ТСР > / {состояние [$ NF] ++} END {для (я в состоянии) {печать я, состояние [я]}} | сортировать - р - н

Примечание: Фактическая эффективность работы NetStat является относительно низким, рекомендуется использовать команду сс

сс -antup | AWK '/ ТСР> / {состояние [$ 2] ++} END {для (я в состоянии) {печать я, состояние [я]}}' | сортировать -rn

сс -antup | AWK '/ УДП> / {состояние [$ 2] ++} END {для (я в состоянии) {печать я, состояние [я]}}' | сортировать -rn

Статистика доступа IP определенное количество
кот / вар / Журнал / HTTPD / access_log | AWK '{ф [$ 1] ++} END {для (я в ф) {печать я; ф [я]}}'

Функции
1. встроенной функции
RAND (): возвращает случайное число в диапазоне от 0 до 1
с помощью команды AWK значений принимаются к тому же

Обработка строк
lengeth ([с]) Возвращает длину строки
суб (R, S, [т ]): г представляет собой режим ищет совпадение с строки , представленной т. Сопрягано содержание и замена содержание серы выражается
срез
раскола (S, A [, г ]): В режущей строке разделитель г с, и результатами сохраняются в массиве в разрез , указанном
массивом AWK индекс нумеруются , начиная с 1

рекомендация

отwww.cnblogs.com/bingguoguo/p/10994649.html