Наиболее часто используемый набор методов «AWK» в производственной среде Linux.

Linux Shell

всем привет, серия самого полезного вкуса Мисс Сестричка окончена. Не забудьте сделать ретвит и поставить лайк.

Самая полезная серия:

«Наиболее часто используемый набор навыков «vim» в производственной среде Linux.

«Наиболее часто используемый набор навыков «Sed» в производственной среде Linux.

«Наиболее часто используемый набор навыков «AWK» в производственной среде Linux.

«Расширенные возможности «Сед»: мой маленький мозг вот-вот упадет в обморок»

Те, кто осмеливается использовать свои собственные имена в качестве названий программ, очень самоуверенны. Например, язык Инь или что-то в этом роде.

awkназван в честь инициалов фамилий трех его основателей, все из которых80来岁дедушка. Конечно, есть и комбинация из четырех: популярный шаблон проектирования GoF. Но для такого любителя игр, как я, я думаю о Trinity, что действительно разочаровывает.

Он очень похож на C, чем же он так знаменит, помимо своих мощных функций, давайте подумаемaЭто письмо более продвинутое.awkСравниватьsedПростой, это больше похоже на язык программирования.

распечатать столбец

Ниже действие этих строк кода в основном такое же: вывести первый столбец в файле.

#Java
System.out.println(aStr.split(" ")[0]);

#Python
print(aString.split(" ")[0])

#cut 命令
cut -d " " -f1   file

#awk命令
awk '{print $1}' file

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

Для таких файлов, как csv, символ-разделитель,. нормальное использование-Fпараметры указать. Следующий код печатает столбцы 1 и 2 в файле csv.

awk -F ","  '{print $1,$2}' file

Отсюда мы можем увидеть компоненты базовой команды awk.

В общих языках разработки индексы массива начинаются с 0, а столбцы awk$да1началось, и0Относится к необработанной строке.

Сетевая статистика

В этом разделе мы используем awk для подсчета некоторых сетевых состояний команды netstat и рассмотрим основные элементы языка awk. Вывод netstat аналогичен:

Среди них 6-й столбец указывает на сетевое состояние сетевого соединения. Давайте сначала дадим команду awk и посмотрим на статистические результаты.

netstat  -ant | 
awk ' \
    BEGIN{print  "State","Count" }  \
    /^tcp/ \
    { rt[$6]++ } \
    END{  for(i in rt){print i,rt[i]}  }'

Результат:

State Count
LAST_ACK 1
LISTEN 64
CLOSE_WAIT 43
ESTABLISHED 719
SYN_SENT 5
TIME_WAIT 146

Следующая картинка будет подробно объяснена вышеприведенной командой, надеюсь, вы сможете понять суть awk.

На первый взгляд это выглядит как пугающая команда, но она проста. Awk и наши обычные процедуры не совпадают, они разделены на четыре части.

1,Начало НАЧАЛА, по желанию. Используется для установки некоторых параметров, вывода некоторых заголовков, определения некоторых переменных и т. д. Приведенная выше команда печатает только одну строку информации.

2,КОНЕЦ, по желанию. Используется для вычисления некоторой сводной логики или вывода этого содержимого. Приведенная выше команда с помощью простого цикла for выводит содержимое массива rt.

3.Часть сопоставления с образцом, все еще необязательно. Используется для сопоставления некоторых строк, которые необходимо обработать. Приведенная выше команда соответствует только строкам, начинающимся с tcp, а остальные не обрабатываются.

4.Модуль действий. Можно использовать основную логическую часть, построчную обработку и статистическую печать.

будь осторожен

1. Основная программная часть awk заключена в одинарные кавычки ' вместо двойных кавычек 2. Индекс в начале столбца awk равен 0, а не 1

пример

Давайте рассмотрим роль awk на нескольких простых примерах.

1. Вывести записи, у которых Recv-Q не равен 0

netstat -ant | awk '$2 > 0 {print}'

2. Количество внешних сетевых подключений, сгруппированных по ip

netstat -ant | awk '/^tcp/{print $4}' | awk -F: '!/^:/{print $1}' | sort | uniq -c

3. Печать использования физической памяти RSS

top -b -n 1 | awk 'NR>7{rss+=$6}END{print rss}

4. Фильтровать (удалять) пустые строки

awk 'NF' file

5. Печатайте нечетные строки

awk 'a=!a' file

6. Количество выходных строк

awk 'END{print NR}' file

Эти команды должны понимать некоторые внутренние переменные awk, которые мы представим дальше.

встроенная переменная

FS

Следующие две команды эквивалентны.

awk -F ':'  '{print $3}' file
awk 'BEGIN{FS=":"}{print $3}' file

**НАЧАЛО в блокеFS, является внутренней переменной, которую можно указать или вывести напрямую. **Если ваш файл полезен,отдельно, тоже полезно:Delimited, FS может даже указать несколько разделителей для одновременной работы.

FS="[,:|]"

разное

OFSУкажите разделитель выходного содержимого.Когда количество столбцов очень велико, операция упрощается. Аналогичная команда:

awk -F ':' '{print $1,"-",$2,"-",$4}' file
awk 'BEGIN{FS=":";OFS="-"}{print $1,$2,$4}' file 

NFЧисло столбцов. Очень полезно, например, для фильтрации некоторого контента, количество столбцов которого не соответствует условиям.

awk -F, '{if(NF==3){print}}' file

NRНомера строк, например, следующие две команды эквивалентны.

cat -n file
awk '{print NR,$0}' file

RSфлаг разделения записиORSУказывает флаг-разделитель для записи вывода в журнал.

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

особенности языка программирования

вычисление

Как видно из приведенного выше кода, awk может выполнять некоторые простые операции. Его язык лаконичен и не требует явного определения типов переменных.

такие как вышеrt[$6]++, по умолчанию определен хэш (массив?) с именем rt, ключ в нем — состояние сети, а значение — действующее (+-*/%).

Содержит некоторые встроенные математические операции (ограничено)

int
log
sqrt
exp
sin
cos
atan2
rand
srand

Манипуляции со строками

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

length(str) #获取字符串长度
split(input-string,output-array,separator)
substr(input-string, location, length)

Особенности языка

Awk — небольшой язык программирования. Посмотрите на его базовый синтаксис. Если вам нужна более сложная логика, разберитесь с ней сами, включая некоторые функции обработки времени:

# logic
if(x=a){}
if(x=a){}else{}
while(x=a){break;continue;}
do{}while(x=a)
for(;;){}

# array
arr[key] = value
for(key in arr){arr[key]}
delete arr[key]

asort(arr) #简单排序

Говорят, что awk может выполнять все текстовые операции. Потому что это язык сам по себе.

End

Использовали awk для написания сложных программ обработки журналов и статистики. Хотя чем писатьsedГораздо лучше, но все еще мучаюсь. Кроме того, существуют различия между различными версиями nawk и gawk, поэтому при увеличении сложности бизнеса обычно приходится обращаться к python, который более лаконичен и имеет более полный инструментарий.

Awk чрезвычайно удобен для обработки некоторого простого текста, и чаще всего используется для печати определенного столбца, включая некоторый форматированный вывод. Для awk должно быть просто и перезрело, а сложное привычно.Ведь некоторые大牛, Мне нравится писать такие сценарии.

Больше отличных статей.

«Микросервисы — это не все, а лишь подмножество определенного домена».

«Подбиблиотека и подтаблица»? Отбор и процесс должны быть осторожными, иначе все выйдет из-под контроля».

С таким количеством компонентов мониторинга всегда найдется подходящий для вас

«Указатель базовых знаний системы сообщений Kafka»

«С Нетти, что мы разрабатываем? 》

Линукс из пяти частей и тому подобное.

«Остальная часть необитаемого острова» Linux (1) Подготовка»

«Linux« Остальная часть необитаемого острова »(2) Глава CPU»

«Linux« Остальная часть необитаемого острова »(3) глава памяти»

«Linux« Остальная часть необитаемого острова »(4) глава ввода-вывода»

«Сетевая глава Linux« Оставшаяся жизнь на необитаемом острове »(5)»