Awk: Навчання сценарію оболонки за допомогою команди awk Terminal
Команда "awk" у вільних операційних системах типу GNU / Linux є дуже потужною командою, яка допомагає нам мати більший контроль при обробці даних з інших команд або командних команд. Назва AWK походить від ініціалів прізвищ його авторів: Альфред Aхо, петер Wайнбергер та Брайан Kерніган.
Ця команда забезпечує мову сценаріїв для обробки тексту, за допомогою якої ми можемо: Визначати змінні, використовувати рядки та арифметичні оператори, використовувати управління потоками та цикли, а також створювати відформатовані звіти. Насправді Awk - це більше, ніж просто команда обробки шаблонів, це ціла мова семантичного аналізу.
Вступ до команди "awk"
AWK була однією з перших дуже популярних консольних утиліт для управління (обробки / вилучення) даних шляхом максимізації функціональних можливостей конвеєрів UNIX. Мова, що надається цією утилітою, в даний час є стандартом майже у всіх сучасних операційних системах типу UNIX, настільки, що вона є частиною базових специфікацій UNIX, тому вона, як правило, вже встановлена в більшості з них за замовчуванням.
Найпоширеніший його синтаксис: файли awk 'program' та де 'program' може бути: pattern {action} pattern {action}. Команда зчитує введені файли по одному рядку за раз. Кожен рядок порівнюється з кожним візерунком по порядку; Для кожного шаблону, що відповідає рядку, виконується відповідна дія.
Простий приклад, наприклад:
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 кількісних чисел, дотримуючись шаблону Фібоначчі, давши 2 базові числа, які потрібно побудувати.
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", відвідайте це посилання "DEBIAN Wiki”І якщо ви хочете дізнатись більше про сценарії Shell у нашому власному блозі, Ви можете поглянути на інші наші публікації на цю тему, натиснувши тут: Сценарії в FromLinux
