Команда "awk" в свободных операционных системах типа GNU / Linux - очень мощная команда, которая помогает нам иметь больший контроль при обработке данных из других команд или команд. Название AWK происходит от инициалов фамилий его авторов: Альфред. Aхо, питер WЭйнбергер и Брайан KЭрниган.
Эта команда предоставляет язык сценариев для обработки текста, с помощью которого мы можем: определять переменные, использовать строки и арифметические операторы, использовать управление потоком и циклы, а также создавать форматированные отчеты. Фактически, Awk - это больше, чем просто команда обработки шаблонов, это целый язык семантического анализа.
Введение в команду "awk"
AWK был одной из первых очень популярных консольных утилит для управления (обработки / извлечения) данных за счет максимизации функциональности конвейеров UNIX. Язык, предоставляемый этой утилитой, в настоящее время является стандартом почти во всех современных UNIX-подобных операционных системах, настолько, что он является частью основных спецификаций UNIX, поэтому он обычно уже установлен в большинстве из них по умолчанию.
Его наиболее распространенный синтаксис: awk "программа" файлы, а где "программа" может быть: шаблон {действие} шаблон {действие}. Команда читает вводимый файл по одной строке за раз. Каждая строка по порядку сравнивается с каждым шаблоном; для каждого шаблона, соответствующего строке, выполняется соответствующее действие.
Простой пример вроде:
awk -F: '$1=="root" {print}' /etc/passwd
он запрашивает первое поле, является ли оно корнем каждой строки в / etc / passwd, и печатает его с учетом символа ":" с -F: в качестве разделителя полей.
Практические примеры
Список наиболее часто используемых команд
Просмотрите список на основе истории системного терминала, отсортированный от наиболее часто используемого к наименее используемому.
history | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn | head
пример:
График (таблица) с количеством подключений для каждого хоста
Создайте текстовый граф ASCII, который показывает общее количество подключений от хоста к каждому IP-адресу.
netstat -an | grep ESTABLISHED | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | awk '{ printf("%s\t%s\t",$2,$1) ; for (i = 0; i < $1; i++) {printf("*")}; print "" }'
пример:
Список каталогов по размеру
Распечатайте на экране список каталогов текущего пути от наибольшего до наименьшего с указанием меток, соответствующих их размеру, с использованием букв: g, m и k.
du --max-depth=1 | sort -r -n | awk '{split("k m g",v); s=1; while($1>1024){$1/=1024; s++} print int($1)" "v[s]"\t"$2}'
пример:
Показать трафик из сетевого интерфейса
Просмотр потребления входящих и исходящих данных онлайн в килобайтах (КБ) для указанного сетевого интерфейса.
while [ /bin/true ]; do OLD=$NEW; NEW=`cat /proc/net/dev | grep eth0 | tr -s ' ' | cut -d' ' -f "3 11"`; echo $NEW $OLD | awk '{printf("\rin: % 9.2g\t\tout: % 9.2g", ($1-$3)/1024, ($2-$4)/1024)}'; sleep 1; done
пример:
Получите числовой ряд Фибоначчи
Создайте список количественных чисел X по шаблону Фибоначчи с двумя базовыми числами, которые необходимо построить.
seq 50| awk 'BEGIN {a=1; b=1} {print a; c=a+b; a=b; b=c}'
пример:
Графический листинг файловой структуры по размеру
Получите список всех папок в корне операционной системы вместе с графическим изображением (полосами) и числовым представлением в процентах от их размера в нем.
t=$(df|awk 'NR!=1{sum+=$2}END{print sum}');sudo du / --max-depth=1|sed '$d'|sort -rn -k1 | awk -v t=$t 'OFMT="%d" {M=64; for (a=0;a<$1;a++){if (a>c){c=a}}br=a/c;b=M*br;for(x=0;x<b;x++){printf "\033[1;31m" "|" "\033[0m"}print " "$2" "(a/t*100)"% total"}'
пример:
Перечислить сводку типов файлов в каталоге
Покажите список типов файлов, содержащихся в каталоге, вместе с количеством файлов, которые ему соответствуют.
find . -type f | awk -F'.' '{print $NF}' | sort| uniq -c | sort -g
пример:
Эти примеры командных строк, использующих команду awk, я надеюсь, вы найдете их очень полезными. И они служат для использования непосредственно с консоли или косвенно, вставляя их в скрипт (автоматизированная задача).
В следующем посте о сценариях оболочки мы рассмотрим другие команды.
Если вы хотите узнать больше о команде "grep", перейдите по этой ссылке "ДЕБИАН Вики”И если вы хотите узнать больше о сценариях оболочки в нашем блоге, вы можете ознакомиться с другими нашими публикациями по этой теме, нажав здесь: Сценарии DesdeLinux
Я понял только первый пример, больше ничего