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}'
Пример:

Показване на трафик от мрежов интерфейс
Преглеждайте консумацията на входящи и изходящи данни онлайн в килобайта (kb) за определен мрежов интерфейс.
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, надявам се да ви бъдат много полезни. И те служат за използване директно от конзолата или индиректно чрез вмъкването им в скрипт (автоматизирана задача).
В следващия пост на Shell Scripting ще разгледаме други команди.
Ако искате да научите малко повече за командата "grep", посетете тази връзка "DEBIAN Wiki”И ако искате да научите повече за Shell Scripting в нашия собствен блог, можете да разгледате и другите ни публикации по темата, като кликнете тук: Скриптове в FromLinux
